社区讨论
做法是否正确
P14635[NOIP2025] 糖果店参与者 4已保存回复 9
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @mikdnjn7
- 此快照首次捕获于
- 2025/11/29 22:19 3 个月前
- 此快照最后确认于
- 2025/12/01 19:45 3 个月前
思路看我邮寄,https://www.luogu.com.cn/article/xgx3ecas
我觉得这个很对啊,但是为啥没人和我做法一样。
code
CPP#include<bits/stdc++.h>
#define int __int128
#define rep(i,a,b) for(int i(a);i<=(b);++i)
#define req(i,a,b) for(int i(a);i>=(b);--i)
using namespace std;
char buf[1<<23],*p1=buf,*p2=buf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
template<typename TP> inline TP read(TP &num)
{
TP x=0;
int f=0;
char ch=getchar();
while(ch<48||ch>57) f|=ch=='-',ch=getchar();
while(48<=ch&&ch<=57) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return num=f?-x:x;
}
template<typename ...Args> inline void read(Args &...args)
{
(read(args),...);
}
template<typename TP> inline void write(TP x)
{
(x<0)?(putchar('-'),x=-x):0;
(x>9)?(write(x/10),0):0;
putchar((x%10)^48);
}
template<typename TP> inline void writeln(TP x)
{
write<TP>(x);
puts("");
}
signed main()
{
int n,m; read(n,m);
vector<pair<int,int>> cand(n);
for(auto &[x,y]:cand) read(x,y);
sort(cand.begin(),cand.end(),[&](auto x,auto y)
{
int sx=x.first+x.second,sy=y.first+y.second;
if(sx!=sy) return sx<sy;
if(x.first!=y.first) return x.first<y.first;
return x.second<y.second;
});
auto best=cand[0];
auto eval=[&](int c)->pair<int,int>
{
auto [x,y]=best;
int tot=(x+y)*c;
if(tot>m) return {-1,-1};
int mm=m-tot,res=c*2;
sort(cand.begin(),cand.end());
for(auto [nx,ny]:cand) if(mm>=nx) mm-=nx,++res;
return {res,mm};
};
int l=0,r=m,ans=-1;
while(r-l>5)
{
int mid1=l+(r-l)/3,mid2=r-(r-l)/3;
auto v1=eval(mid1),v2=eval(mid2);
if(v1>=v2) r=mid2,ans=v1.first;
else l=mid1,ans=v2.first;
}
rep(i,l,r) ans=max(ans,eval(i).first);
writeln(ans);
return 0;
}
回复
共 9 条回复,欢迎继续交流。
正在加载回复...