Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long LL;
- struct Event{
- int t;
- int id;
- int type; // 0交易事件 1 迁移事件
- Event() : t(-1), id(-1), type(-1){}
- Event(int _t, int _id, int _type) : t(_t), id(_id), type(_type){}
- bool operator < (const Event &other) const {
- if(t != other.t) return t < other.t;
- if(id != other.id) return t < other.id;
- return type < other.type;
- }
- friend ostream & operator << ( ostream &os, const Event &e){
- printf("%02d:%02d:%02d %d %d\n", e.t/3600, e.t/60%60, e.t%60, e.id, e.type);
- return os;
- }
- };
- int main() {
- freopen("in.txt", "r", stdin);
- int HH,mm,ss,ID,n, m, t;
- map<int, int> mlock, dlock;
- // mlock[id] = t 表示客户id的迁移锁在 t 时刻结束
- // dlock[id] = t 表示客户id的交易锁在 t 时刻结束
- map<int, int> router;
- // 客户id的路由结果 0 老系统 1 新系统
- while(cin >> n >> m){
- vector<Event> events;
- for(int i = 0; i < n; i++){
- scanf("%d:%d:%d %d", &HH,&mm,&ss,&ID);
- t = HH*60*60+mm*60+ss;
- events.emplace_back(t, ID, 1);
- }
- for(int i = 0; i < m; i++){
- scanf("%d:%d:%d %d", &HH,&mm,&ss,&ID);
- t = HH*60*60+mm*60+ss;
- events.emplace_back(t, ID, 0);
- }
- // 排序规则保证了时间相同的情况下 交易事件优先处理
- sort(events.begin(), events.end());
- for(auto &e : events){
- // 交易事件
- if(e.type == 0) {
- // 如果遇到迁移锁 则本次交易失败
- if(mlock[e.id] - e.t > 0 && mlock[e.id] - t <= 60){
- printf("%02d:%02d:%02d %d %d\n",
- e.t/3600, e.t/60%60, e.t%60, e.id, -1);
- continue;
- }
- // 不管是否遇到 交易锁 本次交易都能成功
- dlock[e.id] = e.t + 60; // 更新交易锁
- printf("%02d:%02d:%02d %d %d\n",
- e.t/3600, e.t/60%60, e.t%60, e.id, router[e.id]);
- } else {
- // 迁移事件
- // 如果已经迁移过了
- if(router[e.id] == 1) continue; // 本行考试忘记写了
- if( (dlock[e.id] - e.t > 0 && dlock[e.id] - t <= 60) ||
- (mlock[e.id] - e.t > 0 && mlock[e.id] - t <= 60) ){
- // 如果遇到了交易锁 或者 迁移锁 则本次迁移失败
- continue;
- }
- else {
- // 更新迁移锁时间
- mlock[e.id] = e.t + 60;
- // 更新路由
- router[e.id] = 1;
- }
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement