为甚么我的UVA会一直waiting啊?!
查看原帖
为甚么我的UVA会一直waiting啊?!
658786
STUDENT00楼主2022/10/1 20:19

代码如下(写了一个小时,结果waiting):

#include<bits/stdc++.h>
using namespace std;
int tt,a,b,k,q,deep,t[1010],ans[1010],mins,ttt;
bool flag[10000010],ok;
void dfs(int now,int k,int a,int b){
	if(a==0){
		if(t[deep]<mins){
			memcpy(ans,t,sizeof(int)*(deep+1));
			mins=t[deep];
		}
		ok=1;
		return;
	}
	if(now>deep) return;
	for(int i=max(k+1,(int)ceil(b*1.0/a));i<=min((int)ceil((deep-now+1)*b*1.0/a),(int)1e7);i++){
		if(flag[i]) continue;
		int g=b*i/__gcd(b,i);
		t[now]=i;
		dfs(now+1,i,g/b*a-g/i,g);
	}
}
signed main(){
	scanf("%d",&tt);
	while(tt--){
		ttt++;
		scanf("%d%d%d",&a,&b,&k);
		memset(flag,0,sizeof(flag));
		for(int i=1;i<=k;i++){
			scanf("%d",&q);
			flag[q]=1;
		}
		printf("Case %d: %d/%d=",ttt,a,b);
		ok=0;
		mins=1e9;
		for(deep=1;!ok;deep++) dfs(1,1,a,b);
		for(int i=1;i<deep;i++){
			if(i>1) printf("+");
			printf("1/%d",ans[i]);
		}
		printf("\n");
	}
	return 0;
}
2022/10/1 20:19
加载中...