求助
查看原帖
求助
1013837
Tiskan_H楼主2023/10/15 18:34

第四个点RE了,谁能帮忙看看怎么回事,谢谢!

代码:

#include <bits/stdc++.h>
using namespace std;


int n,k,maxx,x[25],v[25]={0};
int vis[100010],pri[100010],cnt,anss,ans;

int init(int n){
	pri[1]=2;
	for(int i=2;i<=n;i++){
		if(!vis[i]) pri[1+cnt++]=i;
		for(int j=0;j<cnt;j++){
			if(1ll*i*pri[j+1]>n) break;
			vis[i*pri[j+1]]=1;
			if(i%pri[j+1]==0) break;
		}
	}
	return cnt--;
}

int dfs(int c,int f){
	if(c==k+1){
		//cout<<ans<<" ";
		for(int i=1;pri[i]<=ans;i++)
			if(ans==pri[i]) anss+=1; 
	}
	for(int i=f;i<=n;i++){
		if(v[i]==0){
			ans+=x[i],v[i]=1;
			dfs(c+1,i+1);
			ans-=x[i],v[i]=0;
		}
	}
}

int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++) cin>>x[i],maxx+=x[i];
	int m=init(maxx);
	//for(int i=1;i<=m;i++) cout<<pri[i]<<" ";
	dfs(1,1);
	cout<<anss;
	return 0;
}

orz

2023/10/15 18:34
加载中...