救命,样例对了
查看原帖
救命,样例对了
1610817
Tangliwei楼主2024/12/11 16:21
#include <bits/stdc++.h>
using namespace std;

int n, m;
vector<int> card[3];
map<int, int> number[3];
string line;

int cardgame() {
    cin >> n >> m;
    cin.ignore(); // 忽略之前的换行符

    for (int i = 0; i < 3; ++i) {
        getline(cin, line);
        istringstream iss(line);
        int num;
        while (iss >> num) {
            if (number[i].count(num)) {
                number[i][num]++;
            } else {
                number[i][num] = 1;
            }
            if (find(card[i].begin(), card[i].end(), num) == card[i].end()) {
        card[i].push_back(num);  // 如果不存在,添加到 vector 中
    }
        }
        sort(card[i].begin(), card[i].end());
    }
 
 
    int flag = 0;
    int former_value = -1;
    int former_number = 1;
    int noput = 0;

    while (true) {
        bool played = false;
        for (int i = 0; i < card[flag].size(); ++i) {
            if (card[flag][i] > former_value &&number[flag].count(card[flag][i])&& number[flag][card[flag][i]] >= former_number) {
            	
            //	cout<<card[flag][i]<<','<<former_number<<endl;
            	
                number[flag][card[flag][i]] -= former_number;
                former_value = card[flag][i];
                
                
                if (number[flag][card[flag][i]] == 0) {
                    number[flag].erase(card[flag][i]);
                }
                if (number[flag].empty()) {
                    return flag + 1;
                }
                noput = 0;
                played = true;
                break;
            }
		}
			for(int i=0;i<card[flag].size();++i){
			
			if(played==true)break;
			
			if (number[flag].count(card[flag][i])&&number[flag][card[flag][i]] > former_number) {
				
			//	cout<<card[flag][i]<<','<<former_number<<endl;
				
                number[flag][card[flag][i]] -= (former_number + 1);
                former_value = card[flag][i];
                former_number+=1;
                
                if (number[flag][card[flag][i]] == 0) {
                    number[flag].erase(card[flag][i]);
                }
                if (number[flag].empty()) {
                    return flag + 1;
                }
                
                noput = 0;
                played = true;
                break;
            }
        }
    
        if (!played) {
            noput++;
            if (noput == 2) {
                former_value = -1;
                former_number = 1;
                noput = 0;
            }
        }
        flag = (flag + 1) % 3;
    }
}

int main() {
    cout << cardgame() << endl;
    return 0;
}
2024/12/11 16:21
加载中...