Run ID Author Problem Lang Verdict Score Time Memory Code Length Submit Time
135730 陈家宝 时钟问题 C++ Accepted 100 504 MS 40092 KB 1780 2024-03-06 13:36:02

Tests(5/5):


#include<bits/stdc++.h> using namespace std; int n,a[20][20],tab[9][9] = {{1, 1, 0, 1, 1, 0, 0, 0, 0},{1, 1, 1, 0, 0, 0, 0, 0, 0},{0, 1, 1, 0, 1, 1, 0, 0, 0},{1, 0, 0, 1, 0, 0, 1, 0, 0},{0, 1, 0, 1, 1, 1, 0, 1, 0},{0, 0, 1, 0, 0, 1, 0, 0, 1},{0, 0, 0, 1, 1, 0, 1, 1, 0},{0, 0, 0, 0, 0, 0, 1, 1, 1},{0, 0, 0, 0, 1, 1, 0, 1, 1}}; queue<string> que; string ans, ori; unordered_map<string, int> vis; unordered_map<string, string> last; void print(string s) { if (s == ori) return; print(last[s]); cout << vis[s]+1; } void rotate(int what, int dir){ for (int i=0; i<3; i++) for (int j=0; j<3; j++) { a[i][j] += tab[what][i*3+j]*dir+4; a[i][j] %= 4; } } string tstring() { string s; for (int i=0; i<3; i++)for (int j=0; j<3; j++)s += a[i][j] + '0'; return s; } void bfs() { while (!que.empty()) { string s = que.front(); que.pop(); bool flag = true; for (int i=0; i<3; i++) for (int j=0; j<3; j++) { a[i][j] = s[i*3+j]-'0'; if (a[i][j] != 0) flag = false; } if (flag) { ans = s; print("000000000"); return; } string cur; for (int i=0; i<9; i++) { rotate(i, 1); cur = tstring(); if (!vis[cur] && last[cur].empty())que.push(cur), vis[cur] = i, last[cur] = s; rotate(i, -1); } } } signed main() { string s; for (int i=0; i<3; i++) for (int j = 0; j < 3; j++) { int n; cin >> n; s += char(n + '0'); } ori=s; que.push(s); bfs(); return 0; }


Judgement Protocol: