比赛 |
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;
}