fork download
  1. #include <iostream>
  2. #include<bits/stdc++.h>
  3. #include<fstream>
  4. typedef long long ll;
  5. using namespace std;
  6. void winter_is_coming()
  7. {
  8. std::ios_base::sync_with_stdio(0);
  9. cin.tie(NULL); cout.tie(NULL );
  10. }
  11. void file()
  12. {
  13. freopen("crosses.in", "r", stdin);
  14. freopen("crosses.out","w", stdout);
  15. }
  16. int dx[]={ 0, 0, 1, -1, 1, -1, 1, -1 };
  17. int dy[]={ 1, -1, 0, 0, -1, 1, 1, -1 };
  18. const int INF=1e9;
  19.  
  20. char ch[5][5];
  21. map<pair<int,int>,int>mp;
  22. vector<vector<pair<int,int> > >cor;
  23. int lvl[25];
  24. queue<pair<int,int> >q;
  25. string s;
  26. bool valid(int x, int y)
  27. {
  28. if(x>=0 && x<4 && y>=0 &&y<4 )return true;
  29. return false;
  30. }
  31. bool ok;
  32. void reach(pair<int,int>node)
  33. {
  34. int a,b;
  35. a=node.first;
  36. b=node.second;
  37. if(ch[a][b]==s[s.size()-1] && lvl[mp[{a,b}]]==s.size()-1)
  38. {
  39. ok=true;
  40. return;
  41. }
  42.  
  43. for(int i=0;i<8;i++)
  44. {
  45. int x=a+dx[i],y=b+dy[i];
  46. if(valid(x,y))
  47. {
  48. int aa,bb;
  49. aa=mp[{a,b}];
  50. bb=mp[{x,y}];
  51. // cout<<ch[a][b]<<" "<<ch[x][y]<<" . "<<s[lvl[aa]+1]<<"\n";
  52. if(lvl[bb]>lvl[aa]+1 && ch[x][y]==s[lvl[aa]+1] && lvl[aa]+1<s.size() )
  53. {
  54. lvl[bb]=lvl[aa]+1;
  55. // cout<<ch[x][y]<<" "<<lvl[bb]<<"\n";
  56. reach({x,y});
  57. lvl[bb]=INF;
  58. }
  59. }
  60. }
  61. return;
  62. }
  63.  
  64. int main()
  65. {
  66. winter_is_coming();
  67. int t,ca=1,cnt,n,res,ans;
  68. cin>>t;
  69. while(t--)
  70. {
  71. ans=0;
  72. cnt=1;
  73. mp.clear();
  74. cor=vector<vector<pair<int,int> > >(30);
  75.  
  76. for(int i=0;i<4;i++)
  77. {
  78. for(int j=0;j<4;j++)
  79. {
  80. cin>>ch[i][j];
  81. mp[{i,j}]=cnt++;
  82. cor[ch[i][j]-'A'].push_back({i,j});
  83. }
  84. }
  85. cin>>n;
  86. while(n--)
  87. {
  88. cin>>s;
  89. res=s.size();
  90. for(int i=0;i<cor[s[0]-'A'].size();i++)
  91. {
  92. for(int k=0;k<25;k++)lvl[k]=INF;
  93. pair<int,int>node=cor[s[0]-'A'][i];
  94.  
  95. //cout<<node.first<<node.second<<"\n";
  96. ok=false;
  97. lvl[mp[node]]=0;
  98.  
  99. //q.push(node); bfs();
  100. reach(node);
  101. if(ok)
  102. {
  103. if(res==3 || res==4)ans+=1;
  104. else if(res==5)ans+=2;
  105. else if(res==6)ans+=3;
  106. else if(res==7)ans+=5;
  107. else ans+=11;
  108. //cout<<s<<"\n";
  109. break;
  110. }
  111. lvl[mp[node]]=INF;
  112. }
  113. }
  114. cout<<"Score for Boggle game #"<<ca++<<": "<<ans<<"\n";
  115. }
  116.  
  117. return 0;
  118. }
  119.  
Success #stdin #stdout 0s 4544KB
stdin
3

TNXO
AAEI
IOSR
BFRH
8
OATS
TAXES
RISE
ANNEX
BOAT
FROSH
HAT
TRASH

FNEI
OBCN
EERI
VSIR
1
BEER

ABCD
HGFE
IJKL
PONM
20
ABCDEFGHIJKLMNOP
ABCDEFGHIJKLMNO
ABCDEFGHIJKLMN
ABCDEFGHIJKLM
ABCDEFGHIJKL
ABCDEFGHIJK
ABCDEFGHIJ
ABCDEFGHI
ABCDEFGH
ABCDEFG
ABCDEF
ABCDE
ABCD
ABC
AHIPOJGBCFKNMLED
MNOPIJKLEFGHDCBA
MLEDCFKNOJGBAHIP
GBCDEFKLMNOJIHA
DCBAHGFELKJIPONM
PIHABGJONKFCDELM
stdout
Score for Boggle game #1: 6
Score for Boggle game #2: 1
Score for Boggle game #3: 166