社区讨论
乱搞思路求hack
P14635[NOIP2025] 糖果店参与者 6已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @mimk8qzi
- 此快照首次捕获于
- 2025/12/01 10:59 3 个月前
- 此快照最后确认于
- 2025/12/03 18:05 3 个月前
就是我考场时想出来一个贪心思路,就是先按奇排序,然后找出奇加偶最少的那种糖果,对于那些奇小于等于最少的奇加偶一半价格的都买一个,剩下的全买奇加偶最少的那种糖果。
然后写完代码发现大洋里WA on #6,我仔细研究了一下,发现是会多买奇,导致最后少买了一组奇加偶,于是我给贪心加了一个反悔的过程。
在前面买的时候就记录下最后买的是哪一种,最后算答案时先把一整组奇加偶的,剩下的先不判断能不能买最后的一个奇,而是去查询如果前面买过的那些不买是否能够多买一组。
成功过了样例 6,赛后我重写过了洛谷民间数据,求hack
CPP#include<bits/stdc++.h>
#define int long long
#define getchar_unlocked() getchar()
using namespace std;
inline int read() {int x=0,ff=1;char ch=getchar_unlocked();while(ch<48||ch>57) {if(ch==45)ff=-1;ch=getchar_unlocked();}while(ch>=48&&ch<=57) x=(x<<3)+(x<<1)+(ch^48),ch=getchar_unlocked();return x*ff;}
inline void write(int x,char ch){if(!x){putchar(48),putchar(ch);return;}if(x<0)putchar(45),x=-x;char a[20];int i=0;while(x)a[++i]=x%10+48,x/=10;for(;i;i--)putchar(a[i]);putchar(ch);}
const int N = 2e5 + 10;
int n,m,ans;struct A{int x,y;}a[N];
signed main() {
n = read();m = read();int mn = 0,last = 0;
for(int i=1;i<=n;i++)a[i] = {read(),read()};
sort(a+1,a+1+n,[](A x,A y){return x.x<y.x;});
for(int i=1;i<=n;i++)
if(!mn||a[i].x+a[i].y<a[mn].x+a[mn].y||(a[i].x+a[i].y==a[mn].x+a[mn].y&&a[i].x>a[mn].y))
mn = i;
for(int i=1;i<=n;i++)if(i!=mn&&a[i].x<=m&&a[i].x<=(a[mn].x+a[mn].y)>>1){
ans++;last = i;
m -= a[i].x;
}int x = m/(a[mn].x+a[mn].y);
ans += x*2;m -= x*(a[mn].x+a[mn].y);
for(int i=last;i;i--)if(i!=mn&&m+a[i].x>=(a[mn].x+a[mn].y)){
m = m+a[i].x-a[mn].x-a[mn].y;
ans++;
}ans += m>=a[mn].x;
cout<<ans;
return 0;
}
回复
共 6 条回复,欢迎继续交流。
正在加载回复...