Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
125653 | 廖悦扬 | 时钟问题 | C++ | 通过 | 100 | 427 MS | 40088 KB | 2075 | 2024-01-23 20:07:13 |
#include <bits/stdc++.h> using namespace std; int n; int a[20][20]; int 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; }