fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. struct num{
  5. int v;
  6. num(){}
  7. num(int v):v(v){}
  8. };
  9. int mp[5][5]={{},{0, 1,2,3,4} ,
  10. {0, 2,-1,4,-3},
  11. {0, 3,-4,-1,2},
  12. {0, 4,3,-2,-1}};
  13. int c2i(char c)
  14. {
  15. switch(c)
  16. {
  17. case '1':return 1;
  18. case 'i':return 2;
  19. case 'j':return 3;
  20. case 'k':return 4;
  21. }
  22. throw;
  23. }
  24. num operator*(num a,num b)
  25. {
  26. bool neg=(a.v<0)^(b.v<0);
  27. int v=mp[abs(a.v)][abs(b.v)];
  28. neg^=(v<0);
  29. v=abs(v);
  30. if(neg)v=-v;
  31. return {v};
  32. }
  33. struct repstr{
  34. string s;
  35. ll rep;
  36. ll size()const
  37. {return s.size()*rep;}
  38. char operator[](ll i)
  39. {return s[i%s.size()];}
  40. };
  41. int main()
  42. {
  43. int T;
  44. scanf("%d",&T);
  45. int no=1;
  46. while(no<=T)
  47. {
  48. ll l,x;
  49. cin>>l>>x;
  50. repstr s;
  51. cin>>s.s;
  52. s.rep=x;
  53. num t=1;
  54. num goal=2;
  55. ll i;
  56. bool ok=0;
  57. ll j=-1;
  58. for(i=0;i<s.size();i++)
  59. {
  60. t=t*c2i(s[i]);
  61. if(t.v==goal.v)
  62. goal.v++, t=1, j=i;
  63. else if((i-j)==l*4)
  64. {ok=0; break;}
  65. if(goal.v==5){ok=1; break;}
  66. }
  67. if(ok)
  68. {
  69. t=1;
  70. for(i++;(s.size()-i)%(4*l)!=0;i++)
  71. {
  72. t=t*c2i(s[i]);
  73. }
  74. if(t.v!=1)
  75. ok=0;
  76. }
  77. if(ok)
  78. printf("Case #%d: YES\n",no++);
  79. else
  80. printf("Case #%d: NO\n",no++);
  81. }
  82. }
  83.  
Success #stdin #stdout 0s 3280KB
stdin
5
2 1
ik
3 1
ijk
3 1
kji
2 6
ji
1 10000
i
stdout
Case #1: NO
Case #2: YES
Case #3: NO
Case #4: YES
Case #5: NO