牛客国庆集训派对Day7 Solution
A Relic Discovery
水。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int t, n; 5 6 int main() 7 { 8 scanf("%d", &t); 9 while (t--) 10 { 11 scanf("%d", &n); 12 int res = 0; 13 for (int i = 1, a, b; i <= n; ++i) 14 { 15 scanf("%d%d", &a, &b); 16 res += a * b; 17 } 18 printf("%d ", res); 19 } 20 return 0; 21 }
B Pocket Cube
按题意模拟即可,注意顺时针转逆时针转均可,也就是说一个面有八种旋转可能
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int t; 5 int G[10][10], tmp[10][10]; 6 7 bool ok() 8 { 9 for (int i = 1; i <= 6; ++i) 10 for (int j = 2; j <= 4; ++j) 11 if (tmp[i][j] != tmp[i][j - 1]) 12 return false; 13 return true; 14 } 15 16 void clear() 17 { 18 for (int i = 1; i <= 6; ++i) 19 for (int j = 1; j <= 4; ++j) 20 tmp[i][j] = G[i][j]; 21 } 22 23 int origin[][8][2] = 24 { 25 // top 26 {4, 3, 4, 4, 6, 1, 6, 3, 2, 2, 2, 1, 5, 4, 5, 2,}, 27 // bottom 28 {4, 1, 4, 2, 6, 1, 6, 3, 2, 4, 2, 3, 5, 3, 5, 1,}, 29 // left 30 {1, 1, 1, 3, 2, 1, 2, 3, 3, 1, 3, 3, 4, 1, 4, 3,}, 31 // right 32 {1, 4, 1, 2, 4, 4, 4, 2, 3, 4, 3, 2, 2, 4, 2, 2,}, 33 // front 34 {1, 3, 1, 4, 6, 3, 6, 4, 3, 2, 3, 1, 5, 3, 5, 4,}, 35 // back 36 {3, 3, 3, 4, 6, 2, 6, 1, 1, 2, 1, 1, 5, 2, 5, 1,}, 37 }; 38 39 int Move[][8][2] = 40 { 41 {5, 4, 5, 2, 4, 3, 4, 4, 6, 1, 6, 3, 2, 2, 2, 1,}, 42 {5, 3, 5, 1, 4, 1, 4, 2, 6, 1, 6, 3, 2, 4, 2, 3,}, 43 {4, 1, 4, 3, 1, 1, 1, 3, 2, 1, 2, 3, 3, 1, 3, 3,}, 44 {2, 4, 2, 2, 1, 4, 1, 2, 4, 4, 4, 2, 3, 4, 3, 2,}, 45 {5, 3, 5, 4, 1, 3, 1, 4, 6, 3, 6, 4, 3, 2, 3, 1,}, 46 {5, 2, 5, 1, 3, 3, 3, 4, 6, 2, 6, 1, 1, 2, 1, 1,}, 47 }; 48 49 bool work() 50 { 51 clear(); if (ok()) return true; 52 for (int i = 0; i < 6; ++i) 53 { 54 for (int j = 0; j < 8; j += 2) 55 { 56 clear(); 57 for (int k = 0; k < 8; ++k) 58 { 59 int x = (j + k) % 8; 60 tmp[origin[i][x][0]][origin[i][x][1]] = G[Move[i][x][0]][Move[i][x][1]]; 61 } 62 if (ok()) return true; 63 } 64 for (int j = 1; j < 8; j += 2) 65 { 66 clear(); 67 for (int k = 0; k > -8; --k) 68 { 69 int x = (j + k + 8) % 8; 70 int y = (x + 4) % 8; 71 tmp[origin[i][x][0]][origin[i][x][1]] = G[Move[i][y][0]][Move[i][y][1]]; 72 } 73 if (ok()) return true; 74 } 75 } 76 return false; 77 } 78 79 int main() 80 { 81 scanf("%d", &t); 82 while(t--) 83 { 84 for (int i = 1; i <= 6; ++i) 85 for (int j = 1; j <= 4; ++j) 86 scanf("%d", &G[i][j]); 87 puts(work() ? "YES" : "NO"); 88 } 89 return 0; 90 }