Educational Codeforces Round 43 (Rated for Div. 2) E. Well played!

很烦的一个题目,只在一个仆人身上加血,可惜了,比赛的时候一个多小时,没想明白,代码中总是会有多行必出错的毛病。很烦

#include <bits\stdc++.h>
using namespace std;
struct node
{
    long long x,y,z;
}a[200005];
bool cmp(node b,node c)
{
    return b.z<c.z;
}
long long pow1(long long n,int k)
{
    long long ans=n;
    for(int i=1;i<=k;i++)
        ans*=2;
     return ans;
}
int main()
{
int n,c,b;
scanf("%d%d%d",&n,&c,&b);
long long max1=0,sum=0;
for(int i=0;i<n;i++)
scanf("%I64d%I64d",&a[i].x,&a[i].y),a[i].z=a[i].x-a[i].y;
sort(a,a+n,cmp);
int t=n;
for(int i=0;i<n;i++)
        if(i+b<n)sum+=a[i].y;//比赛中写成i+t
        else if(a[i].z<0)sum+=a[i].y;
        else {
                if(t==n)t=i;
                sum+=a[i].x;}

if(b==0)
{
    printf("%I64d\n",sum);
    return 0;
}
max1=sum;
a[n].x=0;
a[n].y=0;
a[n].z=0;
for(int i=0;i<n;i++)
{
  if(i<t&&n-t==b)
  {
   max1=max(max1,sum-a[t].x+a[t].y+max(pow1(a[i].x,c),a[i].y)-a[i].y);
  }
  else
  {
  max1=max(max1,sum-max(a[i].x,a[i].y)+pow1(a[i].x,c));

  }
}


printf("%I64d\n",max1);
    return 0;
}


猜你喜欢

转载自blog.csdn.net/clx55555/article/details/80158312