0Pts求条
查看原帖
0Pts求条
1013733
urfnr_GYACp楼主2025/7/23 23:18

代码(有wa也有re,样例1和2过了,第三个没过):

#include <bits/stdc++.h>
using namespace std;
int n, vis[1000], cs, ccl[1000];
vector <vector <pair <int, int> > > stu (1000), room (1000);
vector <pair <int, pair <int, int> > > yy;
int main () {
    cin >> n;
    while (n --) {
        string s;
        cin >> s;
        if (s == "reserve") {
            int stid, rmid, drt;
            string stt;
            cin >> stid >> rmid >> stt >> drt;
            int st_time = ((stt[0] - '0') * 10 + (stt[1] - '0')) * 60 + ((stt[3] - '0') * 10 + (stt[4] - '0'));
            if (drt > 120 || vis[stid] == 3) {
                cout << "FAIL\n";
                vis[stid] = min (vis[stid] + 1, 3);
                if (vis[stid] > 1) {
                    while (stu[stid].size ()) {
                        if (room[stu[stid].back ().first].back ().first == stid) room[stu[stid].back ().first].pop_back ();
                        stu[stid].pop_back ();
                    }
                }
            }
            else if ((stu[stid].size () == 0 || stu[stid].back ().second <= st_time)) {
                if (room[rmid].size () == 0 || room[rmid].back ().second <= st_time) {
                    stu[stid].push_back ({rmid, st_time + drt});
                    room[rmid].push_back ({stid, st_time + drt});
                    yy.push_back ({stid, {rmid, st_time + drt}});
                    cs ++;
                    cout << "SUCCESS " << cs << '\n';
                } else cout << "FAIL\n"; 
            } else if (stu[stid].back ().second > st_time) {
                vis[stid] = min (vis[stid] + 1, 3);
                if (vis[stid] > 1) {
                    while (stu[stid].size ()) {
                        if (room[stu[stid].back ().first].back ().first == stid) room[stu[stid].back ().first].pop_back ();
                        stu[stid].pop_back ();
                    }
                }
                cout << "FAIL\n";
            } else /*if (room[rmid].back ().second > st_time)*/ {
                cout << "FAIL\n";
            }
        } else {
            int x;
            cin >> x;
            if (ccl[x]) cout << "FAIL\n";
            else {
                ccl[x] = 1;
                if (x <= yy.size ()) {
                    cout << "SUCCESS\n";
                    if (stu[yy[x - 1].first].back ().first == yy[x - 1].second.first && stu[yy[x - 1].first].back ().second == yy[x - 1].second.second) stu[yy[x - 1].first].pop_back ();
                    if (room[yy[x - 1].second.first].back ().first == yy[x - 1].first && room[yy[x - 1].second.first].back ().second == yy[x - 1].second.second) room[yy[x - 1].second.first].pop_back ();
                } else cout << "FAIL\n";
            }
        }
    }
}

还有不理解第三个样例为什么第一次取消操作是fail

2025/7/23 23:18
加载中...