Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #define MAXN 300+10
- char dmap[MAXN][MAXN],dbmap[20][20];
- int n,m,q,a,b,map[MAXN][MAXN],bmap[20],dpmap[MAXN][20];
- int main()
- {
- int bit,k,found=0,loop;
- scanf("%d%d",&m,&n);
- for (int i = 1; i <= n; ++i)
- scanf("%s",dmap[i]);
- for(int i=1; i<=n; i++)
- {
- for(int j=1; j<=m; j++)
- {
- if(j<=15)
- dpmap[i][j]=dpmap[i][j-1]+((1<<(j-1))*(dmap[i][j-1]-'A'));
- else
- dpmap[i][j]=(dpmap[i][j-1]>>1)+((1<<14)*(dmap[i][j-1]-'A'));
- }
- }
- // printf("%d %d ",dpmap[1][15],dpmap[1][16]);
- /*for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=m;j++)
- printf("%d ",dpmap[i][j]);
- printf("\n");
- }*/
- scanf("%d",&q);
- while(q--)
- {
- found=0;
- scanf("%d%d",&b,&a);
- for(int i=0; i<20; i++)
- bmap[i]=0;
- for (int j = 1; j <= a; ++j)
- scanf("%s",dbmap[j]);
- for (int i = 1; i <= a; ++i){
- for (int j = 0; j < b; ++j)
- bmap[i]+=(1<<j)*(dbmap[i][j]-'A');
- }
- loop=n-a+1;
- for(int i=1; i<=loop &&found==0; i++)
- {
- for(int j=b; j<=m; j++)
- {
- if(j<=15) bit=j-b;
- else bit=15-b;
- k=0;
- if(dpmap[i][j]>>bit==bmap[1])
- {
- for(k=1; k<a; k++)
- {
- if(dpmap[i+k][j]>>bit!=bmap[k+1])
- break;
- }
- }
- if(k==a){
- printf("%d %d\n",((j-b+1)+j)/2,(i+i+a)/2);
- break;
- found=1;
- }
- }
- }
- }
- return 0;
- }
- /*10 5
- ABABABABAB
- AAAAABBBBB
- AAABBBAAAB
- AABBAABBAA
- ABBABAABBA
- 3
- 3 3
- BBB
- BAA
- ABB
- 9 3
- ABABABABA
- AAAAABBBB
- AAABBBAAA
- 5 1
- BBBBB
- 16 1
- BBBBBBBBBBBBBBBA
- 1
- 3 1
- BBA
- 7 1
- AABAAAB
- 1
- 3 1
- AAB*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement