求助(急)
查看原帖
求助(急)
1183074
xzy_AK_IOI楼主2025/1/21 20:35

为什么这个代码123434 2这组样例输出多了一倍

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define F(i,k,n) for (int i=k;i<=n;i++)
typedef long long ll;
const int N=12;
int dp[1<<N][1010];
int t,d,n;
int to[N];
int jie[N];
string s;
int _pow(int a,int b){
	int ans=1;
	F(i,1,b) ans*=a,ans%=d;
	return ans%d;
}
signed main(){
	cin>>t;
	jie[0]=1;
	F(i,1,10) jie[i]=jie[i-1]*i;
	while (t--){
		cin>>s>>d;
		memset(dp,0,sizeof dp);
		memset(to,0,sizeof to);
		F(i,0,s.size()-1) to[s[i]-'0']++;
		dp[0][0]=1;
		n=s.size();
		F(i,0,(1<<n)-1){
			int sum=0;
			F(l,0,n-1) if ((i>>l)&1) sum++;
			F(l,0,n-1){
				if ((i>>l)&1) continue;
			//	cout<<j<<'\n';
				int now=s[l]-'0';
				F(k,0,d-1){
					dp[i+(1<<(l))][(k+now*_pow(10,sum+1))%d]+=dp[i][k];
				}
			}
		}
		int ans=dp[(1<<n)-1][0];
		F(i,0,9) ans/=jie[to[i]];
		cout<<ans<<' ';
	}
	return 0;
}
2025/1/21 20:35
加载中...