Pagini recente » Cod sursa (job #693971) | Cod sursa (job #617743) | Cod sursa (job #2634362) | Cod sursa (job #3160255) | Cod sursa (job #1968896)
#include <bits/stdc++.h>
#define NMAX 1010
#define LGMAX 11
#define GET_SIZE(x) (((double)sizeof(x))/1024/1024)
using namespace std;
ifstream fin("xcmmdc.in");
ofstream fout("xcmmdc.out");
int n,m,q,l,k,limit;
int rmq[LGMAX][NMAX][NMAX];
int loga[NMAX];
int answer[NMAX];
int query(int x,int y,int d) {
int log=loga[d],t1,t2,t3,t4,x1,y1;
d--;
x1=x+d;
y1=y+d;
t1=rmq[log][x][y];
t2=rmq[log][x1-(1<<log)+1][y];
t3=rmq[log][x][y1-(1<<log)+1];
t4=rmq[log][x1-(1<<log)+1][y1-(1<<log)+1];
return __gcd(__gcd(t1,t2),__gcd(t3,t4));
}
int main()
{
fin>>n>>m>>k>>q;
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
fin>>rmq[0][i][j];
}
}
limit =max(n,m);
for(int i=2;i<NMAX;i++) {
loga[i]=loga[i/2]+1;
}
for(int log=1;(1<<log)<=limit;log++) {
for(int i=1;i+(1<<log)-1<=n;i++) {
for(int j=1;j+(1<<log)-1<=m;j++) {
int len=(1<<(log-1));
rmq[log][i][j]=__gcd(
__gcd(rmq[log-1][i][j],rmq[log-1][i+len][j]),
__gcd(rmq[log-1][i][j+len],rmq[log-1][i+len][j+len])
);
}
}
}
for(int aux=1;aux<=limit;aux++) {
for(int i=1;i+aux-1<=n;i++) {
for(int j=1;j+aux-1<=m;j++) {
if(query(i,j,aux)==k) {
answer[aux]++;
}
}
}
}
for(int t=1;t<=q;t++) {
fin>>l;
fout<<answer[l]<<'\n';
}
return 0;
}