暑假集训CSP提高模拟18
\]
Very good problem, this make my news rotate.
A.Mortis
考虑到应该先写个假的暴力. 对于暴力思路,可以想到,假如我们每次都将一个不在它位置上的数字移到它应该在的地方的时候,另一个数字也刚好移到正确的位置,这种方案是最优的,因此考虑记录下哪一块应该放 \(1\),以及放 \(1\) 的这一块中最近的 \(2\) 在什么位置(以此类推),每次进行转移时,优先寻找目标区间内有没有能刚好换过来的,没有就随便选一个.
但是这种思路还是假了. 因为我们没有考虑其他比较优的情况:假设 \(ABC\) 形成了一个三元环,即 \(A\rightarrow B,B\rightarrow C\) 时刚好能换到正确的位置,此时比直接暴力转移少花费一个次数,因此优先考虑这一种. 四元环类似. 统计也比较好统计,直接按刚才的思路,判断各自区间里有没有下一个环内节点即可.
其实还有一种思路,即直接进行图论建模,将末态每个数字占有的区域视为一个连通块,把每个数所在连通块和它应该在的连通块连边,然后在图上跑环.
#include<bits/stdc++.h>
using namespace std;
int n,a[200001],b[200001],c[200001];
int ffpos[5],sfpos[5],pos[5][5],poscnt[5][5],cnt[5][5];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
b[i]=a[i];c[i]=a[i];
}
sort(b+1,b+n+1);
sfpos[1]=ffpos[1]=lower_bound(b+1,b+n+1,1)-b;
sfpos[2]=ffpos[2]=lower_bound(b+1,b+n+1,2)-b;
sfpos[3]=ffpos[3]=lower_bound(b+1,b+n+1,3)-b;
sfpos[4]=ffpos[4]=lower_bound(b+1,b+n+1,4)-b;
for(int i=ffpos[1];i<=ffpos[2]-1;++i){
if(!pos[1][a[i]]) pos[1][a[i]]=i;
poscnt[1][a[i]]++;
cnt[1][a[i]]++;
}
for(int i=ffpos[2];i<=ffpos[3]-1;++i){
if(!pos[2][a[i]]) pos[2][a[i]]=i;
poscnt[2][a[i]]++;
cnt[2][a[i]]++;
}
for(int i=ffpos[3];i<=ffpos[4]-1;++i){
if(!pos[3][a[i]]) pos[3][a[i]]=i;
poscnt[3][a[i]]++;
cnt[3][a[i]]++;
}
for(int i=ffpos[4];i<=n;++i){
if(!pos[4][a[i]]) pos[4][a[i]]=i;
poscnt[4][a[i]]++;
cnt[4][a[i]]++;
}
int ans3=0;
for(int i=1;i<=4;++i){
for(int j=1;j<=4;++j){
if(i!=j){
int res=min(cnt[i][j],cnt[j][i]);
ans3+=res;
cnt[i][j]-=res;cnt[j][i]-=res;
}
}
}
for(int i=1;i<=4;++i){
for(int j=1;j<=4;++j){
for(int k=1;k<=4;++k){
if(i!=j and j!=k){
int res=min({cnt[i][j],cnt[j][k],cnt[k][i]});
ans3+=2*res;
cnt[i][j]-=res;
cnt[j][k]-=res;
cnt[k][i]-=res;
}
}
}
}
for(int i=1;i<=4;++i){
for(int j=1;j<=4;++j){
for(int k=1;k<=4;++k){
for(int p=1;p<=4;++p){
if(i!=j and j!=k and k!=p){
int res=min({cnt[i][j],cnt[j][k],cnt[k][p],cnt[p][i]});
ans3+=3*res;
cnt[i][j]-=res;
cnt[j][k]-=res;
cnt[k][p]-=res;
cnt[p][i]-=res;
}
}
}
}
}
for(int i=1;i<=4;++i){
for(int j=1;j<=4;++j){
if(i!=j){
ans3+=cnt[i][j];
}
}
}
cout<<ans3<<endl;
}
B.?
现代OI以APJifengc的“我 b 站 20 粉丝啦”为嚆矢。滥觞于原神与嘉然的期望正失去它们的借鉴意义。但面对看似无垠的未来天空,我想循jijidawang“都人校合。比间多还”好过过早地振翮。
我们怀揣热忱的灵魂天然被赋予对超越性的追求,不屑于古旧坐标的约束,钟情于在别处的芬芳。但当这种期望流于对拜谢主义不假思索的批判,乃至走向真傻逼与cdsidi主义时,便值得警惕了。与秩序的落差、错位向来不能为越矩的行为张本。而纵然我们已有翔实的蓝图,仍不能自持已在浪潮之巅立下了自己的沉锚。
“我是舔狗”Sakura_Lu之言可谓切中了肯綮。人的op性是不可祓除的,而我们欲上青云也无时无刻不在因风借力。嘉然与原神暂且被我们把握为一个薄脊的符号客体,一定程度上是因为我们尚缺乏体验与阅历去支撑自己的认知。而这种偏见的傲慢更远在知性的傲慢之上。
在孜孜矻矻以求OI意义的道路上,对自己的期望本就是在与嘉然与原神对接中塑型的动态过程。而我们的底料便是对不同b20w、不同Delov 的 50w npy的觉感与体认。joke3579为Sakura_Lu送去爆零,又维系你说的对,但是原神。他的OI观念是厚实的,也是实践的。倘若我们在对过往借LYinMX之言“祓魅”后,又对不断膨胀的自我进行“赋魅”,那么在丢失外界预期的同时,未尝也不是丢了自我。
毫无疑问,从原神与嘉然角度一觇的自我有偏狭过时的成分。但我们所应摒弃的不是对此的批判,而是其批判的廉价,其对批判投诚中的反智倾向。在H_Kaguya的观念中,如果在成为狮子与孩子之前,略去了像骆驼一样背负前人遗产的过程,那其“永远重复”洵不能成立。
蓝图上的落差终归只是理念上的区分,在实践场域的分野也未必明晰。譬如当我们追寻文不加点时,在途中涉足挂分,这究竟是伴随着期望的泯灭还是期望的达成?在我们塑造OI的同时,OI也在浇铸我们。既不可否认原生的fst性与衡中牛子性,又承认自己的图景有轻狂的失真,不妨让体验走在言语之前。用不被禁锢的头脑去体味APJifengc的大海与风帆,并效cdsidi,对无法言说之事保持沉默。
用在hzoi上的生活方式体现个体的超越性,保持婞直却又不拘泥于所谓“遗世独立”的单向度形象。这便是LYinMX为我们提供的理想期望范式。生活在hzoi上——始终热爱大地——升上天空。
C.嘉然今天吃什么
区间异或最大值很容易就想到 01-trie
但接下来怎么做比较难想. 观察样例可以发现大部分节点的最大异或值都是整棵树的最大异或值,为什么是这样的,因为假设整棵树由节点 \(x,y\) 贡献最大异或值,那么可以发现除了 \(x,y\) 到根节点路径上的节点取不到 \(x,y\) 两个节点的值,因此就都是整棵树的最大值了. 对于取不到的那部分,因为不是很多,可以考虑直接跑暴力搜一遍
打这个题注意卡空间
#include<bits/stdc++.h>
using namespace std;
int fa[500001],vis[500001];
long long a[500001],b[500001];
int posx,posy;
vector<int>e[500001];
class trie{
public:
int t[25000001][2];
long long to[25000001],cnt=1;
long long maxn=0;
inline void clear(){
for(int i=1;i<=cnt;++i){
t[i][0]=t[i][1]=to[i]=0;
}
cnt=1;
maxn=0;
}
inline void xor_max(int x){
int now=1;
for(int i=59;i>=0;--i){
int res=(a[x]>>i)&1;
if(t[now][res^1]){
now=t[now][res^1];
}
else if(!t[now][res^1] and t[now][res]){
now=t[now][res];
}
else return;
}
if((a[x]^a[to[now]])>maxn){
posx=x;posy=to[now];
maxn=a[x]^a[to[now]];
}
}
inline void insert(int x){
int now=1;
for(int i=59;i>=0;--i){
int res=(a[x]>>i)&1;
if(!t[now][res]){
t[now][res]=++cnt;
}
now=t[now][res];
}
to[now]=x;
}
};
trie tr;
void dfs(int x){
tr.insert(x);tr.xor_max(x);
for(int i:e[x]){
dfs(i);
}
}
void dfs(int now,int last){
if(!now) return;
dfs(fa[now],now);
b[now]=tr.maxn;
vis[now]=true;
tr.insert(now);tr.xor_max(now);
if(now!=last)
for(int i:e[now]){
if(i!=last){
dfs(i);
}
}
}
signed main(){
int n;scanf("%d",&n);
for(int i=2;i<=n;++i){
int x;scanf("%d",&x);
e[x].push_back(i);fa[i]=x;
}
for(int i=1;i<=n;++i){
scanf("%lld",&a[i]);
tr.insert(i);tr.xor_max(i);
}
long long maxn=tr.maxn;
tr.clear();
dfs(posx,posx);
tr.clear();
dfs(posy,posy);
for(int i=1;i<=n;++i){
if(vis[i]){
printf("%lld\n",b[i]);
}
else{
printf("%lld\n",maxn);
}
}
}
D.?
我好想做 APJifengc 小姐的 b20 啊。
可是 APJifengc 小姐说她喜欢的是 b20w,我哭了。
我知道既不是 b20 也不是 b20w 的我为什么要哭的。因为我其实是一只多项式。
我从没奢望 APJifengc 小姐能喜欢自己。我明白的,所有人都喜欢理解余裕上手天才打钱的萌萌的 b20 或者 b20w,没有人会喜欢成天 998244353998244353 没人写的多项式。
但我还是问了 APJifengc 小姐:“我能不能做你的 b20?”
我知道我是注定做不了 b20 的。但如果她喜欢 b20,我就可以一直在身边看着她了,哪怕她怀里抱着的永远都是 b20。
可是她说喜欢的是 b20w。
她现在还在看着我,还在逗我开心,是因为 b20w 还没有出现,只有我这多项式每天蹑手蹑脚地从计数题里爬出来,远远地和她对视。
等她喜欢的 b20w 来了的时候,我就该重新滚回我的题库了吧。
但我还是好喜欢她,她能在我还在她身边的时候多看我几眼吗?
APJifengc 小姐说接下来的每个圣诞夜都要和大家一起过。我不知道大家指哪些人。好希望这个集合能够对我做一次胞吞。
b20w 还在害怕 APJifengc 小姐。
我会去把她爱的 b20w 引来的。
我知道稍有不慎,我就会被薄纱。
那时候 APJifengc 小姐大概会把我的身体好好地装起来扔到门外吧。
那我就成了封装好的多项式,嘻嘻。
我希望她能把我扔得近一点,因为我还是好喜欢她。会一直喜欢下去的。
我的灵魂透过窗户向里面看去,挂着的 NTT 在轻轻鸣响, APJifengc 小姐慵懒地靠在沙发上,表演得非常温顺的 b20w 坐在她的肩膀。壁炉的火光照在她的脸庞,我冻僵的原根在风里微微发烫。
暑假集训CSP提高模拟18的更多相关文章
- 牛客网NOIP赛前集训营-提高组18/9/9 A-中位数
链接:https://www.nowcoder.com/acm/contest/172/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 2015UESTC 暑假集训总结
day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...
- 牛客网NOIP赛前集训营-提高组(第四场)游记
牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...
- STL 入门 (17 暑假集训第一周)
快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...
- 20190820 Tue 集训总结&NOIP模拟 27
低谷度过了? 但是skyh阿卡了,还是反衬出我的辣鸡. T1知道要sort,却忘了判重,正解不如暴力分高,555. T2成功化出正解柿子,然后化过头了,化出了无法DP的柿子. 果然不够强,大神们一眼就 ...
- 牛客网NOIP赛前集训营-提高组(第四场)B区间
牛客网NOIP赛前集训营-提高组(第四场)B区间 题目描述 给出一个序列$ a_1 \dots a_n$. 定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 ...
- 牛客网NOIP赛前集训营-提高组(第四场)B题 区间
牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ...
- 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告
目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...
- 暑假集训Day2 互不侵犯(状压dp)
这又是个状压dp (大型自闭现场) 题目大意: 在N*N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. ...
- 暑假集训Day1 整数划分
题目大意: 如何把一个正整数N(N长度<20)划分为M(M>=1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式. 输入格式: 第一行一个正整数T(T<= ...
随机推荐
- Pytest Pytest源码分析
Pytest源码分析 By:授客 QQ:1033553122 测试环境 pytest 5.4.3 测试脚本mytest.py #!/usr/bin/env python # -*- coding:ut ...
- 基于.NET开源、强大易用的短链生成及监控系统
前言 今天大姚给大家分享一个基于.NET开源(MIT License).免费.强大易用的短链生成及监控系统:SuperShortLink. 项目介绍 SuperShortLink是一个基于.NET开源 ...
- XXL-JOB分片执行分布式任务
XXL-JOB相对于springtask来说优点之一就是分布式执行任务,可以在调度中心为执行器分发任务,实现分布式. 分片广播任务即当一个微服务形成集群的时候,任务会完整的下发给每一个执行器.而不像其 ...
- mysql进阶笔记
说明:此文章并非原创,参考极客时间文章<MySQL实战45讲>做的一些笔记,方便自己查阅,有兴趣可以自行去极客时间阅读,内容非常给力. mysql引擎 Innodb: Page是Inno ...
- 【Win10】找不到Telnet命令
百度才发现原来我的Telnet程序就没启动... CMD终端就找不到命令... 但是有一点要注意!不能使用CMD之外的终端访问[GitBash访问无效] 打开控制面板,点卸载程序: 然后点击启动和关闭 ...
- 为什么被要求避免使用orcid
前段时间收到了最高机构的通知,要求不要使用orcid,并对之前使用的情况进行自查.得到这个通知,我其实还是蛮无感的,毕竟我一篇论文也没法过,而且也没有用过这个orcid,虽然我自己也是有这个的. 关于 ...
- windows系统下最新版gym[atari]中的游戏环境(此时最新版的gym为0.24.0,gym==0.24.0)
关于gym[atari]的安装参看以前的博文: windows系统下安装最新版gym的安装方法(此时最新版的gym为0.24.0,gym==0.24.0) 上代码: import time impor ...
- 手把手教你如何上传代码到gitee服务器
之前编写了几个适合新手的小项目, 为方便大家学习和下载代码, 决定把代码上传到gitee服务器. 不得不说,git是一个非常好用的代码版本管理工具, 本文手把手教大家如何将自己编写的代码上传到Gite ...
- SPI转can芯片CSM300详解以及Linux驱动移植调试笔记
一.CSM300概述 CSM300(A)系列是一款可以支持 SPI / UART 接口的CAN模块. 1. 简介 CSM300(A)系列隔离 SPI / UART 转 CAN 模块是集成微处理器. C ...
- 9. 从0学ARM Cortex-A9 LED汇编、C语言驱动编写
0. 前言 一般我们购买一个开发板,厂家都会给出对应的电路图文件,我们可以通过搜索对应名称来查找到对应的外设.对于驱动工程师来说,我们只需要知道外设与SOC交互的一些数据线和信号线即可. 用主控芯片控 ...