题目链接:
题意:
给你n个数,然后从新组合,现在有m个询问,每次给你一个x,k,问你能不能将n个数组合成的t,st. (x+t)%k==0
题解:
dfs求出全部的组合会比较慢,然后全排列函数用的循环,比较快。
然后就用全排列水过去了
1 #include2 #define F(i,a,b) for(int i=a;i<=b;++i) 3 using namespace std; 4 5 const int N=1e5+7; 6 7 int a[N],n,m,dt[10],ed; 8 9 int main(){10 while(~scanf("%d%d",&n,&m))11 {12 ed=0;13 F(i,1,n)scanf("%d",dt+i);14 sort(dt+1,dt+1+n);15 do16 {17 if(dt[1])18 {19 int num=0;20 F(i,1,n)num=num*10+dt[i];21 a[++ed]=num;22 }23 }while(next_permutation(dt+1,dt+1+n));24 sort(a+1,a+1+ed);25 while(m--)26 {27 int x,y;28 scanf("%d%d",&x,&y);29 int fg=1;30 F(i,1,ed)31 {32 if((x+a[i])%y==0)33 {34 printf("%d\n",a[i]);35 fg=0;36 break;37 }38 }39 if(fg)puts("None");40 }41 42 }43 return 0;44 }