noip 2012 国王游戏

如果说这道题作为一道贪心的话其实并不难,但是高精确实烦人(像我这种蒟蒻,看了模板也得想好久)

其实这里只用到了高精乘低精,高精除以低精,要是高精除以高精就完蛋惹;

主要是想学习一下高精而已,加油吧! 

#include
#include
#include
#include
#include
#include
using namespace std;
struct hyq{
	int l,r;
}c[1010];
int res[51000];
char a1[30010];
int ans[30010],anss[30010],ansss[30010];
int b1,sl,maxx,ll;
int maxn[10010]; 
bool cmp(hyq a,hyq b){
	return a.l*a.r9){
			res[sl+1]+=res[sl]/10;
			res[sl]=res[sl]%10;
			sl++;
		}
		while(res[sl]==0&&sl>1) sl--;		
}
void chu(int ss){
	memset(anss,0,sizeof(anss));
	memset(ansss,0,sizeof(ansss));
	memset(ans,0,sizeof(ans));
	ll=sl;
	for(int i=1;i<=ll;i++) anss[ll-i+1]=res[i];
	long long sx=0;
	for(int i=1;i<=ll;i++){
		ansss[i]=(sx*10+anss[i])/ss;
		sx=(sx*10+anss[i])%ss;
	}
	for(int i=1;i<=ll;i++){
		ans[i]=ansss[ll-i+1];
	}
	while(ans[ll]==0&&ll>1){
		ll--;
	}
}
void max(){
	if(ll>maxx){
		maxx=ll;
		for(int i=ll;i>=1;i--){
			maxn[i]=ans[i];
		}
	}
	else if(ll==maxx){
		for(int i=ll;i>=1;i--){
			if(ans[i]>maxn[i]){
				maxx=ll;
				for(int j=i;j>=1;j--){
					maxn[j]=ans[j];
				}
				break;
			}
			if(ans[i]>n;
	cin>>a1;
	cin>>b1;
	sl=strlen(a1);
	for(int i=0;i>c[i].l>>c[i].r;
	}
	sort(c+1,c+n+1,cmp);
	for(int i=1;i<=n;i++){
		if(i!=1) mul(c[i-1].l);
		chu(c[i].r);
		max();
	}
	for(int i=maxx;i>=1;i--) cout<

 

你可能感兴趣的:(noip 2012 国王游戏)