3 条题解

  • 0
    @ 2025-3-30 10:32:04

    #include #include #include using namespace std; typedef pair<int,int> PII; int change[4][4]; int get(int x,int y){//二维转一维 return x * 4 + y; } int main(){ int st = 0; for(int i = 0;i < 4;i++){ string line; cin>>line; for(int j = 0;j < 4;j++){ if(line[j] == '+') st += 1 << get(i,j);//状态压缩 } } for(int i = 0;i < 4;i++){ for(int j = 0;j < 4;j++){ for(int k = 0;k < 4;k++){ change[i][j] += 1 << get(i,k);//改变第i行状态 change[i][j] += 1 << get(k,j);//改变第j列状态 } change[i][j] -= 1 << get(i,j);//恢复重复改变的状态 } } vector res; for(int k = 0;k < 1 << 16;k++){//枚举所有可能的解法 int now = st; vector path; for(int i = 0;i < 16;i++){ if(k >> i & 1){ int x = i / 4,y = i % 4; now ^= change[x][y]; path.push_back({x,y}); } } if(!now && (res.empty()|| res.size() > path.size())) res = path; } cout<<res.size()<<endl; for(auto x : res) cout<<x.first + 1<<" "<<x.second + 1<<endl; return 0; }

    信息

    ID
    27
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    176
    已通过
    99
    上传者