#创人计划#昨晚CF1039幽默解题过程
2025-07-29 00:26:26
发布于:湖南
总结:练胆子的一场。
嗯,对,就是那个比赛开始了。
嗯,A 题 , 显然不行。
就是说这个那个,可以选择一个垃圾,它的重量小于等于 就可以免费摧毁,否则就得花 金币。而且每次操作其他垃圾重量翻倍这一块。
呃呃呃你说得对,但是垃圾的数量 ,只是在这题刚好 罢了。
所以我就有了一个 的解法了。
嗯就是说,请输入文本
大于 的不用去管,直接清理小于 的最大的那个就行了。
请输入文本
显然可以用一个堆去搞。普通队列好像也行但是要排序。算了算了
不对啊,把堆里面的元素一个一个乘二是 的,多了四个老哥。
我们可以用 cur 记录乘数。那就把五个老哥变为一个老哥了。
void solve(){
int n, m;
cin >> n >> m;
for(int i = 1; i <= n; i++) cin >> a[i];
普莱哦瑞提-库呃库呃 <int> 扣;
int ans = 0, cur = 1;
for(int i = 1; i <= n; i++){
扣点铺叙(a[i]);
}
while(1){
外游(感叹号扣点恩普提()按的扣点头普()乘西游而大于欸木){
安斯++, q.剖普();
}
衣服(扣点恩普提()) 布瑞克;
扣点剖普();
系于二倍增;
}
cout << ans << '\n';
}
好的来到 B 题。
给定一个双端队列,然后每次弹出左边或右边,使弹出的序列不能出现连续五个单调递增/递减。
经过我 10min 的深思,我想到了一个非常绝妙的贪心:
第一次弹出最小值,第二次弹出最大值,第三次在弹出最小值……
好的,样例没有问题。
在经过了 15min 的深思,我证明了这个做法的正确性:
- 这题是 B 题,肯定不会考得特别难
- 就只有这两个操作还能玩出什么花
- 我找不出反例 = 没有反例
void solve(){
int n;
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
低库呃库呃 <int> 扣;
for(int i = 1; i <= n; i++) 扣点铺叙巴克(a[i]);
int cur = 1;
while(!扣点恩普提()){
if((扣点富朗特()小于扣点百科())等于系于二) L, 扣点破普富朗特;
else R, 扣点破普百科;
系于二反转;
}
cout << '\n';
}
好,提交,卧槽通过了???
既然通过了就别想那么多了,直接进 C
呃首先模拟了一下样例,猜个结论,必须满足 。
呃呃呃第三个样例错了
重新蒙一个 。
这下样例是过了,要是 WA on 2 我就不调了
啊?1234 都过了?这把有希望
吗的 RE 数组开小了
没事重新交一发
卧槽过了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
放个代码,溜了
#include <iostream>
#include <cstdio>
#define int long long
using namespace std;
int a[200005];
void solve(){
int n;
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
int mn = a[1];
for(int i = 2; i <= n; i++){
依附(欸哎大于等于欸木嗯){
NO
锐吞;
}
欸木嗯等于命(欸木嗯逗号欸哎);
}
YES
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int t;
cin >> t;
while(t--) solve();
return 0;
}
过了那还说啥啊直接开 D
挖去怎么要求区间 LDS 之和啊我哪知道咋做啊
DP 好像也不行吧
哦哦哦有个条件 pipi+1 最大值一定大于 pi+2
那应该是给我们贪心用的,分类讨论一下吧
欸 pi>pi+1 那两个都得选否则选右边的
欸好像是对的!
我真是个天才,这样下去 E1 都有希望啊
这样就找逆序对就行了吧
但是树状数组不太好改怎么办
硬着头皮改了
欸不对啊样例一怎么只有 4 个逆序对啊我怎么算出来 5 个
欸卧槽逆天了老弟不是逆序对
那就简单了
造白白浪费了20min
光速写好代码
样例过了
OKAC了
#include <iostream>
#include <cstdio>
#include <vector>
#define int long long
using namespace std;
int a[500005];
int n, ct;
void solve(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
int ans = 0;
for(int i = 2; i <= n; i++){
衣服(欸哎大于欸哎减一) 安斯加等于(嗯减哎加一)乘以(哎减一)
}
cout << 安斯加嗯乘以(嗯加一)除以二 << '\n';
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int t;
cin >> t;
while(t--) solve();
return 0;
}
好的来到了 E1
呃感觉像二分
好板子打好了
不对啊
这 check 函数怎么写啊
我去不打了睡觉
睡不着
正好比赛结束了,看看多少名
还行应该能青
怎么回事还有 System test 怎么不告诉我
卧槽我们 Room 榜一 A 寄了
还好我的四题都没事
最终也是顺利拿到了 2256 名
那肯定能青了
战绩
吗的我好唐啊
E1 本来能做出来的
1111111111111111111111111111111111111111111
check 直接构造 数组看看有没有前缀和大于等于 就行了
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
全部评论 4
求中译英
4小时前 来自 上海
0看不懂
18小时前 来自 河北
0就是让你看不懂的(((
18小时前 来自 湖南
0
hhhhhhhhhhh
昨天 来自 上海
0d
昨天 来自 湖南
0
有帮助,赞一个