社区讨论
求挂分原因
P14635[NOIP2025] 糖果店参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @milfvsnk
- 此快照首次捕获于
- 2025/11/30 16:09 3 个月前
- 此快照最后确认于
- 2025/12/02 22:01 3 个月前
做法是将 (x+y)/2 和 x 放在一起并排序,做法应该没问题,但似乎炸精度了,把double 改为 long double 就对了,求原因,为什么 m=1e18 的时候精度会炸?
CPP#include <bits/stdc++.h>
#define int long long
//#define double long double
using namespace std;
int n,cnt,m;
struct node{
double val;
int id;
}b[1000005];
bool cmp(node x,node y)
{
return x.val<y.val;
}
signed main()
{
freopen("candy3.in","r",stdin);
freopen("candy.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
int x,y;
cin>>x>>y;
b[++cnt].val=x;
b[cnt].id=1;
b[++cnt].val=(x+y)*1.0/2;
}
sort(b+1,b+cnt+1,cmp);
int ans=0;
for(int i=1;i<=cnt;i++)
{
if(b[i].id==0)
{
ans+=2*m/(b[i].val*2);
// int x=2*m/(b[i].val*2);
// m%=(int)(b[i].val*2);
m-=(int)(2*m/(b[i].val*2))*b[i].val;
}
else
{
if(b[i].val<=m)
{
m-=b[i].val;
ans++;
}
}
}
cout<<ans<<'\n';
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...