社区讨论
90分求助
P4181[USACO18JAN] Rental Service S参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m4urpst0
- 此快照首次捕获于
- 2024/12/19 11:34 去年
- 此快照最后确认于
- 2024/12/19 11:34 去年
WA了5号测试点,已经下载了,答案是12625206706,我这个程序算出来的是12625206707,检查了好几遍,个人觉得我的这个结果是对的,怀疑测试点给的结果
CPP#include <bits/stdc++.h>
using namespace std;
void gj(long long *q,long long *p,int k,int n)
{
long long i,t;
i=k;
if(k*2+1<n && p[k*2+1]<p[i])
i=k*2+1;
if(k*2+2<n && p[k*2+2]<p[i])
i=k*2+2;
if(i!=k)
{
t=p[i];
p[i]=p[k];
p[k]=t;
t=q[i];
q[i]=q[k];
q[k]=t;
gj(q,p,i,n);
}
}
int main()
{
long long n,m,r,i,j,t,ans=0;
cin>>n>>m>>r;
long long c[n],q[m],p[m],a[n],b[r];
for(i=0;i<n;i++)
cin>>c[i];
sort(c,c+n);
for(i=0;i<m;i++)
{
cin>>q[i]>>p[i];
for(j=i;j>0 && p[j]<p[(j-1)/2];j=(j-1)/2)
{
t=p[j];
p[j]=p[(j-1)/2];
p[(j-1)/2]=t;
t=q[j];
q[j]=q[(j-1)/2];
q[(j-1)/2]=t;
}
}
for(i=m-1;i>0;i--)
{
t=p[i];
p[i]=p[0];
p[0]=t;
t=q[i];
q[i]=q[0];
q[0]=t;
gj(q,p,0,i);
}
j=0;
for(i=n-1;i>=0;i--)
{
a[i]=0;
while(c[i] && j<m)
{
if(c[i]>=q[j])
{
a[i]+=q[j]*p[j];
c[i]-=q[j];
q[j]=0;
j++;
}
else
{
a[i]+=c[i]*p[j];
q[j]-=c[i];
c[i]=0;
}
}
}
for(i=0;i<r;i++)
cin>>b[i];
sort(b,b+r);
j=r-1;
for(i=0;i<n;i++)
if(a[i]<b[j])
{
a[i]=b[j];
j--;
}
else
break;
for(i=0;i<n;i++)
ans+=a[i];
cout<<ans<<endl;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...