社区讨论

求问代码正确性

P14635[NOIP2025] 糖果店参与者 2已保存回复 3

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@mijyfoio
此快照首次捕获于
2025/11/29 15:13
3 个月前
此快照最后确认于
2025/11/30 11:10
3 个月前
查看原帖
rt,考场上大样例全过,民间数据2wa2tle
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
int read(){
	int x=0,f=0;
	char c=getchar();
	while(!isdigit(c))f|=c=='-',c=getchar();
	while(isdigit(c))x=x*10+(c^48),c=getchar();
	return f?-x:x;
}
struct node{
	int x,y;
}a[1000100];
int n,m,sum[1000010];
int tw(int pos){
	int l=1,r=n,ans=0;
	while(l<=r){
		int mid=(l+r)>>1;
		if(sum[mid]<=pos){
			l=mid+1;
			ans=mid;
		}else{
			r=mid-1;
		}
	}
	return ans;
}
bool cmp(node x,node y){
	return x.x<y.x;
}
int mn=LLONG_MAX,mnx,mny;
signed main(){
	n=read(),m=read();
	for(int i=1;i<=n;i++){
		a[i].x=read(),a[i].y=read();
		if(a[i].x+a[i].y<mn){
			mn=a[i].x+a[i].y;
			mny=a[i].y;
			mnx=a[i].x;
		}else if(a[i].x+a[i].y==mn){
			if(a[i].y>mny){
				mny=a[i].y;
				mnx=a[i].x;
			}
		}
	}
	int ans=m/mn*2,ans1=0;
	m-=m/mn*mn;
	sort(a+1,a+1+n,cmp);
	ans1=ans;
	for(int i=1;i<=n;i++){
		sum[i]=sum[i-1]+a[i].x;
	}
	for(int i=0;i<=ans;i++){
		if(i&1){
			m+=mny;
		}else if(i){
			m+=mnx;
		}
		ans1=max(ans1,ans+tw(m)-i);
	}
	cout<<ans1;
}


回复

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

正在加载回复...