(P1335 [NOI2013] 小 Q 的修炼)求救
查看原帖
(P1335 [NOI2013] 小 Q 的修炼)求救
838116
yqz01楼主2023/11/17 15:55

在线求救!!!*

我要死啦... 题目找不到错在哪里!!

代码如下:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Event {
    int type; 
    int var1;
    int var2; 
    int jump1; 
    int jump2; 
};

int main() {
    int n, m;
    cin >> n >> m;

    vector<int> vars(m); 
    vector<Event> events(n); 

    for (int i = 0; i < n; ++i) {
        string type;
        cin >> type;

        if (type == "c") { 
            events[i].type = 1;
            cin >> events[i].var1;
        } else if (type == "v") { 
            events[i].type = 1;
            cin >> events[i].var1;
            vars[events[i].var1 - 1] = 0; 
        } else if (type == "+") { 
            events[i].type = 1;
            cin >> events[i].var1;
            cin >> events[i].jump1;
        } else if (type == "-") { 
            events[i].type = 1;
            cin >> events[i].var1;
            cin >> events[i].jump1;
            events[i].jump1 = -events[i].jump1; 
        } else if (type == "s") { 
            events[i].type = 2;
            cin >> events[i].jump1;
            cin >> events[i].jump2;
        } else if (type == "i") { 
            events[i].type = 3;
            string varType1, varType2;
            cin >> varType1;
            cin >> events[i].var1;
            cin >> varType2;
            cin >> events[i].var2;
            cin >> events[i].jump1;
            cin >> events[i].jump2;
        }
    }

    int currEvent = 0; 
    int achievement = 0; 
    vector<int> choices; 

    while (currEvent < n) {
        Event event = events[currEvent];
        int type = event.type;

        if (type == 1) { 
            int var = event.var1;
            int change = event.jump1;
            vars[var - 1] += change;
            currEvent++;
        } else if (type == 2) { 
            int choice;
            cin >> choice;
            choices.push_back(choice);
            currEvent = (choice == 1 ? event.jump1 : event.jump2);
        } else if (type == 3) { 
            int var1 = event.var1;
            int var2 = event.var2;
            int jump1 = event.jump1;
            int jump2 = event.jump2;

            if (vars[var1 - 1] < vars[var2 - 1]) {
                currEvent = jump1;
            } else {
                currEvent = jump2;
            }
        }

        
        achievement = max(achievement, vars[0]);
    }

    
    for (int choice : choices) {
        cout << choice << endl;
    }

    return 0;
}
2023/11/17 15:55
加载中...