Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

送代码~

Posted by liu_cheng_ao at 2016-10-08 16:20:53 on Problem 3040
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
#define udv(a,b) ((a%b)?(a/b+1):(a/b))//向上取整除法
#define ddv(a,b) (b?(a/b):0x3f3f3f3f)//向下取整防0除法
int n,c,ans,sta=1;
int tme[25],mnc,ub[25];
struct Coin{
	int v,b;
}cn[25];

bool cmp(struct Coin a,struct Coin b)
{
	return a.v<b.v;
}
void init()
{
	scanf("%d%d",&n,&c);            
    int v,b;
	for(int i=1;i<=n;i++)
    {
             scanf("%d%d",&v,&b);
             cn[i].v=v;cn[i].b=b;
    }
	sort(cn+1,cn+n+1,cmp);
	mnc=udv(c,cn[1].v);
	for(int i=2;i<=n;i++)
	tme[i]=cn[i].v/cn[i-1].v;
}
int main()
{
	init();
	ub[sta]=mnc;
	for(int i=sta+1;i<=n;i++)
	{
		ub[i]=ub[i-1]/tme[i];
		ub[i-1]%=tme[i];
	}
	while(1)
	{
		int d=0x3f3f3f3f;
		for(int i=n;i>=sta+1;i--)
		{
			if(ub[i])
			{
				if(ub[i]>cn[i].b)
				{
					ub[i-1]+=(ub[i]-cn[i].b)*tme[i];
					ub[i]=cn[i].b;
				}
				d=min(d,ddv(cn[i].b,ub[i]));
			}
		}
		int dsta=ddv(cn[sta].b,ub[sta]);
		bool flg=false;
		while(ub[sta]>cn[sta].b)
		{
			if(sta>=n)
			{
				flg=true;break;
			}
			ub[sta+1]+=udv(ub[sta],tme[sta+1]);
			sta++;
			dsta=ddv(cn[sta].b,ub[sta]);
		}
		d=min(d,dsta);
		if(flg)break;
		ans+=d;
		for(int i=sta;i<=n;i++)
		cn[i].b-=d*ub[i];
	}
	printf("%d",ans);
	return 0;
} 

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator