2014年11月7日 星期五

JAG K - Idempotent Filter

http://jag2014autumn.contest.atcoder.jp/tasks/icpc2014autumn_k

To check : for all x in imgF, F(x) = x

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<vector>
  6. #include<utility>
  7. #include<map>
  8. #include<set>
  9. #include<queue>
  10. #include<cmath>
  11. using namespace std;
  12. typedef long long int int64;
  13. char str[1000];
  14. const int fil = (1<<0) + (1<<1) + (1<<2) + (1<<4) + (1<<5) + (1<<6);
  15. int make(int a0, int a1, int a2, int a3, int a4, int a5, int a6){
  16. return (a0<<0)+(a1<<1)+(a2<<2)+(a3<<3)+(a4<<4)+(a5<<5)+(a6<<6);
  17. }
  18. int g(int x){ return str[x] == '1'; }
  19. int f(int x){
  20. //printf("f(%d)\n", x);
  21. return (x&fil)|(g(x)<<3);
  22. }
  23.  
  24. // ***
  25. // ****
  26. //*****
  27. // ****
  28. // ***
  29. void prt(int x){
  30. for(int lx = 0;lx < 7;lx++)
  31. printf("%d", (x>>lx)&1);
  32. return;
  33. }
  34. int main()
  35. {
  36.  
  37. for(;;){
  38. scanf("%s", str);
  39. if(str[0] == '#') break;
  40. // Find Image
  41. bool check = true;
  42. for(int lx = 0;lx < (1<<19) and check;lx++){
  43. int p[19];
  44. for(int pp = 0;pp < 19;pp++){ p[pp] = (lx>>pp)&1; }
  45. int img = make(g(make(p[18], p[15], p[17], p[14], p[10], p[13], p[9])),
  46. g(make(p[15], p[11], p[14], p[10], p[6], p[9], p[5])),
  47. g(make(p[17], p[14], p[16], p[13], p[9], p[12], p[8])),
  48. g(make(p[14], p[10], p[13], p[9], p[5], p[8], p[4])),
  49. g(make(p[10], p[6], p[9], p[5], p[2], p[4], p[1])),
  50. g(make(p[13], p[9], p[12], p[8], p[4], p[7], p[3])),
  51. g(make(p[9], p[5], p[8], p[4], p[1], p[3], p[0])));
  52. //prt(img); printf(" -> "); prt(f(img)); puts("");
  53. if(img != f(img))
  54. check = false;
  55. }
  56. puts(check ? "yes":"no");
  57. }
  58. return 0;
  59. }

沒有留言:

張貼留言