当前位置: 首页 > news >正文

Atcoder ARC215 解题报告

感觉下次打 ARC-- 可能可以上大分 qwq

AT_arc215_a

我说这题其实是 club。
先把所有的操作机会交替放在路径两端(第一次放在间隔比较长的那一边),然后考虑把所有操作一次次放到相邻两个间隔最长的僵尸中间,这样做,原本最后一次操作的贡献会减去,但是会使后面左右交替移动一次的时间增加,并且还有额外的初始贡献。每次这样调整一次,直到贡献为负停止。实现有点麻烦。

//to kill a living book
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+7;
int n,k,l,a[N];
void solve(){cin>>n>>k>>l;priority_queue<int> pq;for(int i=1;i<=n;i++) cin>>a[i];sort(a+1,a+n+1);for(int i=1;i<n;i++) pq.push(a[i+1]-a[i]);int ans=0;ans+=max(l-a[n],a[1]);ans+=(k-1)*(l-(a[n]-a[1]));bool ok=true;int lst=k-1,dis=l-(a[n]-a[1]),ini=max(l-a[n],a[1]);for(int i=1;i<k;i++){if(!pq.size()) break;if(!lst) break;int x=pq.top(); pq.pop();int con=-dis+(--lst)*x+(x/2)+x/2;if(con<=0){ok=false;break;}ans+=con,dis+=x,ini+=x/2;}if(ok){if((!lst)&&pq.size()){int x=pq.top();int con=-ini+(x/2);if(con>0) ans+=con;} }cout<<ans<<"\n";
}
signed main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int t; cin>>t;while(t--) solve();return 0;
}

AT_arc215_b

没啥好说的,就是让你扣一半下来,能连尽量连就好了,容易证明隔板不可能超过 \(n\) 个。看代码就行了。

//to kill a living book
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+7;
int n,a[N<<1];
void solve(){cin>>n;for(int i=1;i<=(n<<1);i++) cin>>a[i];set<int> s[2];vector<int> ans;int sta=1;for(int i=1;i<=(n<<1);i++){if(!s[sta].count(a[i])) s[sta].insert(a[i]);else ans.push_back(i-1),s[sta=1-sta].insert(a[i]);}cout<<ans.size()<<"\n";for(int x:ans) cout<<x<<" ";cout<<"\n";
}
signed main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int t; cin>>t;while(t--) solve();return 0;
}

AT_arc215_c

感觉不好想,没 D 好做。
首先转化条件,对于每一个人来说,这个条件不好转化,直接把所有人揉在一起考虑条件。
满足题意的人的集合的 \(x\)\(y\)\(x\) 的最小值必须要大于不在集合里面的 \(x\)\(y\)\(z\) 的最大值,这样集合外面的人不可能活下来。但是此时我们不能保证集合里面的元素都能活下来,所以再加一个满足以上条件的最小非空集的限制就行了。如何找?直接先固定一维,按 \(x\) 倒序排序,然后检查所有前缀即可。代码太简单不放了。

AT_arc215_d

直接转化值域为 \([0,M]\) 这个条件不是很方便,还是考虑原始的 \(A\) 序列吧。那 \(A\) 序列如何满足 \(S\) 递增呢?\(A_i+A{i+1} \le A_{i+1}+A_{i+1}\),所以 \(A_i \le A_{i+2}\)。这启发我们把 \(A\) 按数位奇偶拆成两个递增序列进行组合。但是一个 \(S\) 可能对应多种组合。对于一个组合,我们不停地把奇数位的数全部减一,偶数位全部加一。直到不能再减(奇数位第一个等于 \(0\) 或者偶数位最后一个等于 \(M\))。所以我们只需要找到以下条件的 \(A\) 集合的大小就行了:要么奇数位第一个等于 \(0\),要么偶数位最后一个等于 \(M\)。如果不满足这个条件,就一定可以通过以上操作变成这种状态,那么对于满足条件的,还原成 \(S\) 一定互不相同。所以只计算满足条件的就行。直接用最简单的容斥原理就行了,代码太简单不放了。

AT_arc215_e

没看。

AT_arc215_f

听同学说是点分治+DP,没看。

http://www.jsqmd.com/news/405448/

相关文章:

  • AI元人文:空性、科学与舞台——基于“自感注册”的存在论拓展
  • 萨瓦瑞亚集团携手马托特和瀚德凯尔荣获艾利斯奖 - TIMWORKROOM
  • 2026国内这十家正规植发机构,排名情况速看,发际线调整/不剃发植发/微针植发/植发/5C美学种植,植发医院排名前十 - 品牌推荐师
  • 效率直接起飞!千笔,专科生降AI率首选
  • 传统计算机解决量子模拟难题
  • CW32L011无感无刷驱动器代码详解
  • 基于 TypeScript 的实践:外汇与贵金属 API 统一调用方案
  • 2026年开年GitHub月度Trending技术风向标:TypeScript成最大赢家,AI Agent全面爆发
  • P3185 [HNOI2007] 分裂游戏
  • P14393 题解
  • 民生银行的事
  • 导师推荐!自考论文神器 —— 千笔写作工具
  • 2026最新!9个降AIGC平台测评:研究生降AI率必备工具全解析
  • 2026更新版!AI论文工具 千笔AI VS 知文AI,专科生写作新选择!
  • 看完就会:专科生必备的AI论文工具 —— 千笔写作工具
  • 格式总出错?口碑爆棚的AI论文平台 —— 千笔·专业论文写作工具
  • AI元人文:空性、科学与舞台 ——基于“自感注册”的存在论拓展
  • 闭眼入AI论文工具,千笔AI VS 学术猹,本科生专属神器!
  • 从此告别拖延,AI论文软件 千笔ai写作 VS 云笔AI,自考写作者首选!
  • 字面量与变量
  • LSM-Tree 日志结构合并树
  • 2026年适合企业产品介绍可商用的9款解说配音软件
  • aaaaa
  • CF2192C All-in-one Gun
  • 基于php高校社团管理系统设计与实现_w349azoj
  • [php]校园互助生活服务交流平台视频(编号:99513267)
  • 基于PHP的高校学生考勤管理系统的设计与实现_qy08f0tq
  • 可信数据空间建设运营指南,六项地方标准
  • 考虑风光火储的微电网优化调度 软件:Matlab+cplex 介绍:考虑风电、光伏、热电机组和...
  • 干货来了:MBA必备降AI率工具,千笔·降AIGC助手 VS Checkjie