题意:
给你n个数,然后从新组合,现在有m个询问,每次给你一个x,k,问你能不能将n个数组合成的t,st. (x+t)%k==0
题解:
dfs求出全部的组合会比较慢,然后全排列函数用的循环,比较快。
然后就用全排列水过去了
1 #include<bits/stdc++.h> 2 #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 do 16 { 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 ",a[i]); 35 fg=0; 36 break; 37 } 38 } 39 if(fg)puts("None"); 40 } 41 42 } 43 return 0; 44 }