社区讨论

求代码证伪

P14635[NOIP2025] 糖果店参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@miv82jpo
此快照首次捕获于
2025/12/07 12:28
3 个月前
此快照最后确认于
2025/12/09 22:40
3 个月前
查看原帖
这份代码为什么不会在k=0时搞出错误答案->k=-1等
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
void read(int &x){
	x=0;bool f=0;char ch=getchar();
	while(ch>'9'||ch<'0'){
		if(ch=='-')f=1;
		ch=getchar();
	}do{x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}while(ch>='0'&&ch<='9');
	x=f?-x:x;
}
int n,m,s,k,mi,mx,my,p;
struct node{
	int x,y,id;
	bool operator<(node b){
		if(p)return x!=b.x?x<b.x:y!=b.y?y<b.y:id<b.id;
		return y!=b.y?y<b.y:x!=b.x?x<b.x:id<b.id;
	}
}a[100002];
signed main(){
	read(n),read(m);
	for(int i=1;i<=n;i++)read(a[i].x),read(a[i].y),a[i].y+=a[i].x,a[i].id=i;
	sort(a+1,a+1+n),mi=a[1].id,mx=a[1].x,my=a[1].y,s=m/my*2,m%=my,s+=(m>=mx),m-=mx*(m>=mx),k=s,p=1,sort(a+1,a+1+n),a[n+1].x=1e9+1;
	for(int i=1;i<=n;i++){
		if(a[i].id==mi)continue;
		if(m>=a[i].x)m-=a[i].x,s++;
//		else if(k<1)break;
		else if(k%2&&mx>=a[i].x)m+=mx-a[i].x,k--;
		else if(k%2==0&&my-mx>=a[i].x)m+=my-mx-a[i].x,k--;
		else if(k>1&&my>=a[i].x+a[i+1].x)m+=my-a[i].x,k-=2,s--;
		else break;
	}
	cout<<s;
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...