Code Feat 中国剩余定理+dfs

题目链接

题意:有一个正整数N满足C个条件,每个条件都形如“它除以X的余数在集合{Y1,Y,2,Y3……Yk}中”,所有条件中的X两两互素,你的任务是找出最小的S个正整数解。

Code Feat 中国剩余定理+dfs_第1张图片

Code Feat 中国剩余定理+dfs_第2张图片

#include 
#define ll long long 
using namespace std;
int C,S;
int X[20],k[20];
int Y[20][150];
int bestC;//存 k/X最小的那个条件C下标 
vector sol;
int a[20];//dfs存每种情况所选的数 

void solve_enum() 
{
	set st[C];
	for(int i=0;i0)
			{
				
			 printf("%lld\n",n);
			 S--;
			}
			if(S==0) break;
		}
	}
}
int main()
{
	while(1)
	{
		scanf("%d%d",&C,&S);
		if(C==0&&S==0) break;
		ll tot=1;//所有情况组合数 
		bestC=0;
		for(int i=0;iX[bestC]*k[i]) bestC=i;//取k/X最小的约束条件下标 
		}
		if(tot<=10000) solve_china();//组合数比较小 可暴力dfs枚举出答案 
		else solve_enum();//组合数比较大  枚举答案判断  
		puts("");
	}
}

 

你可能感兴趣的:(Code Feat 中国剩余定理+dfs)