社区讨论
75求调
P14635[NOIP2025] 糖果店参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @milchgg3
- 此快照首次捕获于
- 2025/11/30 14:34 3 个月前
- 此快照最后确认于
- 2025/12/02 21:15 3 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int n,m,ans;
bool v[N];
struct rec
{
int x,y,z,id;
}a[N],b[N];
bool cmp1(rec qiu,rec qiuu)
{
return qiu.x<qiuu.x;
}
bool cmp2(rec qiu,rec qiuu)
{
return qiu.z<qiuu.z;
}
signed main()
{
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%lld%lld",&a[i].x,&a[i].y);
a[i].z=a[i].x+a[i].y,a[i].id=i;
b[i].x=a[i].x,b[i].y=a[i].y,b[i].z=a[i].z,b[i].id=i;
}
sort(a+1,a+n+1,cmp1);
sort(b+1,b+n+1,cmp2);
int old=m-a[1].x,neww,sum=0,cnt=0,plus=b[1].z;
for(int i=1;i<=n;i++)
{
neww=m-sum-a[i].x;
// printf("old=%lld new=%lld\n",old,neww);
if((neww/plus)!=(old/plus))
{
if(cnt<=2||m<sum)
{
// printf("i=%lld cnt=%lld sum=%lld\n",i,cnt,sum);
for(int j=i-1;j>=i-cnt;j--) v[j]=false;
break;
}
m-=sum,ans+=cnt;
sum=0,cnt=0;
}
sum+=a[i].x,cnt++,old=neww,v[i]=1;
}
// printf("m=%lld plus=%lld\n",m,plus);
// puts("v:");
// for(int i=1;i<=n;i++) printf("%d ",v[i]);
// puts("");
// printf("ans=%lld\n",ans);
ans=ans+(m/plus)*2;
m=m-(m/plus)*plus;
for(int i=1;i<=n;i++) if((!v[i])&&m>=a[i].x) ans++,m-=a[i].x;
printf("%lld",ans);
return 0;
}
🈶🈚dalao可证明此贪心的正伪性
回复
共 0 条回复,欢迎继续交流。
正在加载回复...