比赛 20101117 评测结果 EEEEEEEEEE
题目名称 物品 最终得分 0
用户昵称 郭乾乐 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-11-17 11:06:20
显示代码纯文本
#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;
int cha[1001][2],dd,p,a[1001][2],ci=0;
long long sum=0;
void qst(int l,int r)
{
	int i=l,j=r,mid,t;
	mid=cha[(rand()%(r-l+1))+l][0];
	do
	{
		while(i<r&&cha[i][0]>mid)
			i++;
		while(j>l&&cha[j][0]<mid)
			j--;
		if(i<=j)
		{
			t=cha[i][0];
			cha[i][0]=cha[j][0];
			cha[j][0]=t;
			t=cha[i][1];
			cha[i][1]=cha[j][1];
			cha[j][1]=t;
			i++;
			j--;
		}
	}
	while(i<=j);
	if(i<r)
		qst(i,r);
	if(j>l)
		qst(l,j);
}

void sell(int i)
{
	if(sum>=p&&i<=ci)
	{
		sum-=p;
		sum+=a[cha[i][1]][1];
		sell(i+1);
	}
	else
		dd=i-1;
}

void se()
{
    if(dd!=ci)
	{
	    sum+=a[cha[ci][1]][0];
		ci--;
		sell(dd+1);
		se();
	}
}

int main()
{
	freopen("migica.in","r",stdin);
    freopen("migica.out","w",stdout);
	char s[100];
	int n,i,j=0,t,tt,k,len,ttt,ee;
	scanf("%d%d",&n,&p);
	char x;
	for(i=1;i<=n;i++)
	{
		scanf("%d",&t);
		len=-1;
        ee=0;
		do
		{
			scanf("%c",&x);
			if(x==' ')
			    ee++;	
			len++;
			s[len]=x;
		}
		while(ee<2&&x!='\n'&&!feof(stdin));
		ttt=0;
		for(k=0;k<len;k++)
			if(s[k]!=' ')
				ttt=ttt*10+int(s[k])-48;
		if(ttt!=0)
		{
			j++;
			a[j][0]=t;
			a[j][1]=ttt;
			tt=a[j][1]-a[j][0];
			if(tt<=p)
				sum+=a[j][0];
			else
			{
		    	ci++;
				cha[ci][0]=a[j][1]-a[j][0];
			    cha[ci][1]=j;
			}
		}
		else
			sum+=t;
	}
	dd=ci;
	qst(1,ci);
	sell(1);
	se();
	printf("%lld",sum);
	return 0;
}