题意:
一个多项式:(a0*x^(2^0)+1) * (a1 * x^(2^1)+1)*.......*(an-1 * x^(2^(n-1))+1).
给出ai ,n 问x^q的系数
分析:
展开多项式会发现q可以表示成二进制那么x^q的系数就是q二进制位为1的ai的连乘
ACcode:
#include <bits/stdc++.h>
#define maxn 102
#define mod 2012
#define ll long long
using namespace std;
int a[maxn];
ll bin[100],tmp,top,maxx;
int loop,n,m,tot;
int main(){
bin[0]=1;
for(tot=1;tot<=50;tot++)bin[tot]=bin[tot-1]*2;
maxx=bin[tot-1];
scanf("%d",&loop);
while(loop--){
scanf("%d",&n);
top=((ll)1<<n)-1;
for(int i=1;i<=n;++i)scanf("%d",&a[i]);
scanf("%d",&m);
while(m--){
scanf("%lld",&tmp);
if(tmp>maxx||tmp>top)puts("0");
else{
int k=1;
ll ans=(ll)1;
while(tmp){
if(tmp%2)ans=(ans*a[k])%mod;
++k;
tmp/=2;
}
printf("%lld\n",ans);
}
}
}
return 0;
}