hdu 1755 A Number Puzzle(全排列函数)

题目链接:hdu 1755 A Number Puzzle

题意:

给你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 }
View Code
原文地址:https://www.cnblogs.com/bin-gege/p/6533142.html