题目大意:
给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0)
思路:
早上棒神告诉我一道状压dp
我看了看数据感觉可以next_permutation+map艹过去
结果发现这种时候map太辣鸡T掉了
然后换了set
然后,然后就艹过去了
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstdlib> 5 #include<cstring> 6 #include<algorithm> 7 #include<vector> 8 #include<queue> 9 #include<set> 10 #define inf 2139062143 11 #define ll long long 12 #define MAXN 105 13 using namespace std; 14 inline int read() 15 { 16 int x=0,f=1;char ch=getchar(); 17 while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();} 18 while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();} 19 return x*f; 20 } 21 ll T,k,n,a[11],p,ans; 22 set <ll> s; 23 int main() 24 { 25 T=read(); 26 while(T--) 27 { 28 char ch[11];scanf("%s",ch);k=read(); 29 s.clear(); 30 n=strlen(ch);ans=0; 31 for(int i=0;i<n;i++) a[i]=ch[i]-'0'; 32 sort(a,a+n); 33 do 34 { 35 p=a[0]; 36 for(int i=1;i<n;i++) p=p*10+a[i]; 37 if(p%k==0&&!s.count(p)) {ans++;s.insert(p);} 38 } 39 while(next_permutation(a,a+n)); 40 printf("%d\n",ans); 41 } 42 }