我不会啊
查看原帖
我不会啊
1556451
ggfd121楼主2024/12/12 16:49
#include <iostream>
#include <vector>
#include <set>
using namespace std;


vector<int> shiftOneCircle(int num) {
    vector<int> res;
    for (int i = 0; i < 100; ++i) {
        res.push_back((num + 100 - i) % 100);
    }
    return res;
}

vector<int> shiftTwoCircles(int num1, int num2) {
    vector<int> res;
    for (int i = 0; i < 100; ++i) {
        res.push_back((num1 + 100 - i) % 100);
        res.push_back((num2 + 100 - i) % 100);
    }
    return res;
}

int main() {
    int n;
    cin >> n;
    vector<vector<int>> states(n, vector<int>(5));
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < 5; ++j) {
            cin >> states[i][j];
        }
    }

    
    set<vector<int>> allPossible;
    
    for (int pos = 0; pos < 5; ++pos) {
        vector<int> oneShift = shiftOneCircle(states[0][pos]);
        for (int val : oneShift) {
            vector<int> temp = states[0];
            temp[pos] = val;
            allPossible.insert(temp);
        }
    }

    for (int pos = 0; pos < 4; ++pos) {
        vector<int> twoShift = shiftTwoCircles(states[0][pos], states[0][pos + 1]);
        for (int i = 0; i < twoShift.size(); i += 2) {
            vector<int> temp = states[0];
            temp[pos] = twoShift[i];
            temp[pos + 1] = twoShift[i + 1];
            allPossible.insert(temp);
        }
    }

    
    for (int i = 1; i < n; ++i) {
        set<vector<int>> curPossible;
        
        for (int pos = 0; pos < 5; ++pos) {
            vector<int> oneShift = shiftOneCircle(states[i][pos]);
            for (int val : oneShift) {
                vector<int> temp = states[i];
                temp[pos] = val;
                if (allPossible.count(temp)) {
                    curPossible.insert(temp);
                }
            }
        }
      
        for (int pos = 0; pos < 4; ++pos) {
            vector<int> twoShift = shiftTwoCircles(states[i][pos], states[i][pos + 1]);
            for (int j = 0; j < twoShift.size(); j += 2) {
                vector<int> temp = states[i];
                temp[pos] = twoShift[j];
                temp[pos + 1] = twoShift[j + 1];
                if (allPossible.count(temp)) {
                    curPossible.insert(temp);
                }
            }
        }
        allPossible = curPossible;
    }
    cout << allPossible.size() << endl;
    return 0;
}

哪错啦

2024/12/12 16:49
加载中...