UVa 253 骰子涂色
Posted 谦谦君子,陌上其华
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 253 骰子涂色相关的知识,希望对你有一定的参考价值。
https://vjudge.net/problem/UVA-253
题意:输入两个骰子的六面颜色,判断是否等价。
思路:我最想到的是暴力,不过一直错,也不知道哪里错了。第二种方法就是在一个骰子里出现的一对颜色在第二个骰子也有,只要三对颜色都匹配成功,那么就是等价的。
1 #include<iostream> 2 #include<string> 3 #include<cstring> 4 using namespace std; 5 6 char str[20]; 7 int vis[20]; 8 int ok; 9 10 int main() 11 { 12 //freopen("D:\\txt.txt", "r", stdin); 13 while (gets(str)!=NULL) 14 { 15 ok = 1; 16 memset(vis, 0, sizeof(vis)); 17 for (int i = 0; i < 3;i++) 18 for (int j = 6; j < 12; j++) 19 { 20 if (!vis[j] && str[i] == str[j] && str[5 - i] == str[17 - j]) 21 { 22 vis[j] = vis[17 - j] = 1; 23 break; //这个break必须得加 24 } 25 } 26 for (int i = 6; i < 12; i++) 27 { 28 if (!vis[i]) 29 { 30 ok = 0; 31 cout << "FALSE" << endl; 32 break; 33 } 34 } 35 if (ok) cout << "TRUE" << endl; 36 } 37 return 0; 38 }
再附上我的暴力,不过是wrong的。先留着吧,以后说不定我就能发现哪里错了。
1 #include<iostream> 2 #include<string> 3 #include<cstring> 4 using namespace std; 5 6 char str[20], s1[7], s2[7], s3[7], s4[7]; 7 int vis[20]; 8 int ok; 9 10 void solve(int cur) 11 { 12 if (cur == 3) 13 { 14 s3[6] = ‘\0‘; 15 for (int k = 0; k < 3; k++) 16 { 17 s4[k] = s3[k + 3]; 18 s4[k + 3] = s3[k]; 19 } 20 s4[6] = ‘\0‘; 21 if (!strcmp(s1, s3) || !strcmp(s1, s4)) 22 { 23 ok = 1; 24 } 25 } 26 else 27 { 28 for (int i = 0; i < 3; i++) 29 { 30 if (ok) return; 31 if (!vis[i]) 32 { 33 s3[cur] = s2[i]; 34 s3[5 - cur] = s2[5 - i]; 35 vis[i] = 1; 36 solve(cur + 1); 37 vis[i] = 0; 38 } 39 } 40 } 41 } 42 43 int main() 44 { 45 //freopen("D:\\txt.txt", "r", stdin); 46 while (gets(str) != NULL) 47 { 48 memset(vis, 0, sizeof(vis)); 49 memcpy(s1, str, 6); 50 memcpy(s2, str + 6, 6); 51 s1[6] = ‘\0‘; 52 s2[6] = ‘\0‘; 53 ok = 0; 54 solve(0); 55 if (ok) cout << "TRUE" << endl; 56 else cout << "FALSE" << endl; 57 } 58 return 0; 59 }
以上是关于UVa 253 骰子涂色的主要内容,如果未能解决你的问题,请参考以下文章