fork download
  1. #堀江伸一会津大学オンラインジャッジ問33802xL Minesweeper合格
  2. def f()
  3. l0=gets.to_i
  4. xs=gets.chomp.split(" ")
  5. m=998244353
  6. hsL={}
  7. hsC={}
  8. hsR={}
  9. ans=0
  10. 2.times{|i|
  11. 2.times{|j|
  12. 2.times{|k|
  13. 2.times{|l|
  14. l2=(i+j+k).to_s
  15. r2=(j+k+l).to_s
  16. t1=[i.to_s,j.to_s,k.to_s]
  17. t2=[j.to_s,k.to_s,l.to_s]
  18. [l2,"?"].each{|l3|
  19. [r2,"?"].each{|r3|
  20. hsC[[l3,r3]]=[] if hsC.member?([l3,r3])==false
  21. hsC[[l3,r3]]<<[t1,t2]
  22. }
  23. }
  24. }
  25. }
  26. }
  27. }
  28. 2.times{|i|
  29. 2.times{|j|
  30. 2.times{|k|
  31. l2=(i+j).to_s
  32. r2=(i+j+k).to_s
  33. t1=[i.to_s,j.to_s]
  34. t2=[i.to_s,j.to_s,k.to_s]
  35. [l2,"?"].each{|l3|
  36. [r2,"?"].each{|r3|
  37. hsL[[l3,r3]]=[] if hsL.member?([l3,r3])==false
  38. hsL[[l3,r3]]<<[t1,t2]
  39. }
  40. }
  41. }
  42. }
  43. }
  44. 2.times{|i|
  45. 2.times{|j|
  46. 2.times{|k|
  47. l2=(i+j+k).to_s
  48. r2=(j+k).to_s
  49. t1=[i.to_s,j.to_s,k.to_s]
  50. t2=[j.to_s,k.to_s]
  51. [l2,"?"].each{|l3|
  52. [r2,"?"].each{|r3|
  53. hsR[[l3,r3]]={} if hsR.member?([l3,r3])==false
  54. hsR[[l3,r3]][t1]=1
  55. }
  56. }
  57. }
  58. }
  59. }
  60.  
  61. if l0==1 then
  62. e1=xs[0]
  63. if e1=="3" || e1=="2" then
  64. puts 0
  65. elsif e1=="?"
  66. puts 2
  67. else
  68. puts 1
  69. end
  70. elsif l0==2 then
  71. e1=xs[0]
  72. e2=xs[1]
  73. ans=0
  74. if e1=="3" || e2=="3" then
  75. ans=0
  76. elsif e1=="?" && e2=="?" then
  77. ans=4
  78. elsif e1=="?" || e2=="?" then
  79. if e1=="1" || e2=="1" then
  80. ans=2
  81. else
  82. ans=1
  83. end
  84. elsif e1=="1" && e2=="1"
  85. ans=2
  86. elsif e1==e2
  87. ans=1
  88. else
  89. ans=0
  90. end
  91. puts ans
  92. else
  93. e1=xs[0]
  94. e2=xs[1]
  95.  
  96. rf={}
  97. if hsL.member?([e1,e2])
  98. hsL[[e1,e2]].each{|v1,v2|
  99. rf[v2]=0 if rf.member?(v2)==false
  100. rf[v2]+=1
  101. }
  102. end
  103. xs.shift
  104. last2=xs.last
  105. xs.pop
  106. last1=xs.last
  107. xs.each_cons(2){|e1,e2|
  108. rf2={}
  109. if hsC.member?([e1,e2]) then
  110. hsC[[e1,e2]].each{|v1,v2|
  111. if rf.member?(v1) then
  112. #p [e2,v2]
  113. rf2[v2]=0 if rf2.member?(v2)==false
  114. rf2[v2]=(rf2[v2]+rf[v1])%m
  115. end
  116. }
  117. end
  118.  
  119.  
  120. rf=rf2
  121. #p [e1,e2,rf]
  122. }
  123. #p rf
  124. #p hsR.each{|k,v|
  125. # p k
  126. # p v
  127. #}
  128. rf.each{|k,v|
  129.  
  130. if hsR[[last1,last2]].member?(k) then
  131. ans=(ans+v)%m
  132. end
  133. }
  134.  
  135. puts ans
  136. end
  137. end
  138.  
  139. f()
  140.  
Success #stdin #stdout 0.01s 8036KB
stdin
6
1 ? ? 2 ? 1 ? 2
stdout
2