社区讨论
超时求调
P14635[NOIP2025] 糖果店参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mj54l97v
- 此快照首次捕获于
- 2025/12/14 10:48 2 个月前
- 此快照最后确认于
- 2025/12/16 20:25 2 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
const int NUM = 1e5+1;
long long m;
struct Suger{
long long x;
long long y;
long long sum;
};
Suger su[NUM];
long long min_sum = LLONG_MAX;
int n;
long long ans = 0;
bool cmp1(Suger a, Suger b){
return a.sum<b.sum;
}
bool cmp2(Suger a, Suger b){
return a.x<b.x;
}
bool check(long long flag){
long long cha = m - min_sum * flag;
long long sum = 0;
for (int i = 1;i<=n;i++){
sum += su[i].x;
// cout<<"flag "<<flag<<" sum "<<sum<<" cha "<< cha<<endl;
if (sum == cha){
ans = flag;
return true;
}
}
if (sum < cha){
return true;
}else{
return false;
}
}
int main(){
cin>>n>>m;
long long tmp_s = 0 ;
for (int i = 1;i<=n;i++){
cin>>su[i].x>>su[i].y;
su[i].sum = su[i].x+su[i].y;
if(su[i].sum < min_sum){
min_sum = su[i].sum;
}
tmp_s +=su[i].x;
}
sort(su+1, su+n+1, cmp2);
// sort(su+2, su+n+1, cmp2);
long long temp = m/min_sum;
if (m % min_sum == 0){
cout<< temp *2;
return 0;
}
// long long cha = m - su[1].sum * temp;
long long low = (m - tmp_s)/min_sum; long long high = temp;
// long long ans = 0;
while(low <= high){
long long mid = (low + high )/ 2;
if (check(mid)){
// ans = mid;
low = mid+1;
}else{
high = mid;
}
}
long long sum = 0;
long long cha = m - min_sum * ans;
int count = 0;
for (int i = 1;i<=n;i++){
sum += su[i].x;
count++;
if (sum == cha){
break;
}
}
// cout<<"&"<<ans<<endl;
cout<<ans*2+count;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...