#include<bits/stdc++.h>
using namespace std;
int n,m,d,q;
int ar[205],vis[205][205][15];
int dp(int i,int sum,int c)
{
if(c==m&&sum==0)
return 1;
if(c==m&&sum!=0)
return 0;
if(i==n)
return 0;
if(vis[i][sum][c] != -1)
return vis[i][sum][c];
vis[i][sum][c] = dp(i+1, sum%d, c) + dp(i+1, (sum+ar[i])%d, c+1);
return vis[i][sum][c];
}
int main()
{
int i, j, res;
j = 1;
while(cin>>n>>q)
{
if(n==0&&q==0)
break;
for(i=0;i<n;i++)
{
scanf("%d",&ar[i]);
}
printf("SET %d:\n", j);
for(i = 0; i < q; i++)
{
scanf("%d%d",&d,&m);
memset(vis,-1,sizeof(vis));
res = dp(0, 0, 0);
printf("QUERY %d: %d\n", i+1, res);
}
j++;
}
return 0;
}
using namespace std;
int n,m,d,q;
int ar[205],vis[205][205][15];
int dp(int i,int sum,int c)
{
if(c==m&&sum==0)
return 1;
if(c==m&&sum!=0)
return 0;
if(i==n)
return 0;
if(vis[i][sum][c] != -1)
return vis[i][sum][c];
vis[i][sum][c] = dp(i+1, sum%d, c) + dp(i+1, (sum+ar[i])%d, c+1);
return vis[i][sum][c];
}
int main()
{
int i, j, res;
j = 1;
while(cin>>n>>q)
{
if(n==0&&q==0)
break;
for(i=0;i<n;i++)
{
scanf("%d",&ar[i]);
}
printf("SET %d:\n", j);
for(i = 0; i < q; i++)
{
scanf("%d%d",&d,&m);
memset(vis,-1,sizeof(vis));
res = dp(0, 0, 0);
printf("QUERY %d: %d\n", i+1, res);
}
j++;
}
return 0;
}
কোন মন্তব্য নেই:
একটি মন্তব্য পোস্ট করুন