新闻详情

新闻详情

首页 / 资讯中心 / 详情

题解 [eJOI 2022] Adjacent Pairs

发布时间:2026/9/28 3:51:02来源:尧图网络
题解 [eJOI 2022] Adjacent Pairs
题解 [eJOI 2022] Adjacent Pairs前言题目跳转 : QOJ4925 和 洛谷P13781。本人在 NOIP 模拟上遇到此题作为 T1。题面给一个长为n nn的序列求至少单点赋值多少次后使过程中任何操作后使相邻两数不同且最后的序列仅有两个不同的值求最少操作次数。题解首先因为结束时相邻两数不同且最后的序列仅有两个值所以一定是形如a b a b a b a\text{ }b\text{ }a\text{ }b\text{ }a\text{ }bababab这样的交替出现的序列。然后我们可以枚举a aa和b bb并快速求出所需的次数具体地如果奇数位上已经是a aa那么不用直接修改偶数位同理其它的位置会花费至少一次代价为什么是至少呢首先到达对应的值需要一次然后如b a b b\text{ }a\text{ }bbab这样的情况直接修改中间的a aa成为b bb是错误的要先将中间的a aa修改成为c ( c ≠ a , c ≠ b ) c(c\ne a,c\ne b)c(ca,cb)就是b c b b\text{ }c\text{ }bbcb然后修改b bb成为a aa再修改c cc成为b bb才行。所以说对于连续交替出现的b a b a b b\text{ }a\text{ }b\text{ }a\text{ }bbabab其中第一位应当出现a aa或者a b a b a a\text{ }b\text{ }a\text{ }b\text{ }aababa其中第一位应当出现b bb所多花的代价为a aa和b bb出现次数的最小值显然故答案为( n − c n t 1 , a − c n t 0 , b − f ( b , a ) ) f ( b , a ) × 2 n − c n t 1 , a − c n t 0 , b f ( b , a ) (n-cnt_{1,a}-cnt_{0,b}-f(b,a))f(b,a)\times 2n-cnt_{1,a}-cnt_{0,b}f(b,a)(n−cnt1,a​−cnt0,b​−f(b,a))f(b,a)×2n−cnt1,a​−cnt0,b​f(b,a)其中c n t 0 , x cnt_{0,x}cnt0,x​表示偶数位上x xx的出现次数c n t 1 , x cnt_{1,x}cnt1,x​表示奇数位上x xx的出现次数f ( a , b ) f(a,b)f(a,b)为上述情况的答案注意f ( a , b ) f(a,b)f(a,b)不一定等于f ( b , a ) f(b,a)f(b,a)因为它们意义不同可以发现有f ( a , b ) ∑ l , r ⌊ r − l 1 2 ⌋ f(a,b)\sum\limits_{l,r}\lfloor\frac{r-l1}2\rfloorf(a,b)l,r∑​⌊2r−l1​⌋其中l , r l,rl,r为连续段的左右端点且f ( a , b ) f(a,b)f(a,b)与c n t cntcnt可以预处理f ( a , b ) f(a,b)f(a,b)可以使用mappairint,int,int进行存储详见代码30pts。最后考虑优化发现到f ( a , b ) ≠ 0 f(a,b)\ne 0f(a,b)0的不超过n nn个所以枚举a aa然后枚举满足f ( a , b ) ≠ 0 f(a,b)\ne 0f(a,b)0的b bb这很容易用vector实现然后对于剩下的情况直接考虑最大的c n t 0 , c cnt_{0,c}cnt0,c​且f ( a , c ) 0 f(a,c)0f(a,c)0直接按c n t 0 , c cnt_{0,c}cnt0,c​从大到小枚举第一个不在map中的即可可能看代码100pts比较好理解。代码30pts#includeiostream#includevector#includealgorithm#includemapusingnamespacestd;chars[120],*p,*q;#definegc()(((pq(p(qs)fread(s,1,120,stdin))),pq)?EOF:*q)inlineintread(){intres0;boolsignfalse;charcgc();for(;!isdigit(c);cgc())if(c-)signtrue;for(;isdigit(c);cgc())resres*10c-0;returnsign?-res:res;}intt,n;vectorinta[2],c;mappairint,int,intb;voiddoes(){nread(),a[0].clear(),a[1].clear(),a[0].resize(n1),a[1].resize(n1),c.clear(),c.resize(n1),b.clear();for(inti1;in;i)a[i1][c[i]read()];for(inti1;in;)if(in){intac[i],aac[i1],lasi1;for(intposi2,j0;posn;pos,j!j)if((!jc[pos]!a)||(jc[pos]!aa))break;elselas;if((i1)1)b[{a,aa}](las-i1)/2;elseb[{aa,a}](las-i1)/2;ilas;}intansn;for(inti1;in;i){for(intj1;jn;j)if(i!j)ansmin(ans,n-a[1][i]-a[0][j]b[{j,i}]);}coutans\n;}signedmain(void){ios::sync_with_stdio(0),cin.tie(0);tread();while(t--)does();return0;}100pts#includeiostream#includevector#includealgorithm#includemapusingnamespacestd;chars[120],*p,*q;#definegc()(((pq(p(qs)fread(s,1,120,stdin))),pq)?EOF:*q)inlineintread(){intres0;boolsignfalse;charcgc();for(;!isdigit(c);cgc())if(c-)signtrue;for(;isdigit(c);cgc())resres*10c-0;returnsign?-res:res;}intt,n;vectorinta[2],c;mappairint,int,intb;voiddoes(){nread(),a[0].clear(),a[1].clear(),a[0].resize(n1),a[1].resize(n1),c.clear(),c.resize(n1),b.clear();for(inti1;in;i)a[i1][c[i]read()];vectorvectorintnum(n1);vectorpairint,intcop;for(inti1;in;i)cop.push_back({-a[0][i],i});sort(cop.begin(),cop.end());for(inti1;in;)if(in){intac[i],aac[i1],lasi1;for(intposi2,j0;posn;pos,j!j)if((!jc[pos]!a)||(jc[pos]!aa))break;elselas;if((i1)1)b[{a,aa}](las-i1)/2,num[aa].push_back(a);elseb[{aa,a}](las-i1)/2,num[a].push_back(aa);ilas;}intansn;for(inti1;in;i){for(intj:num[i])ansmin(ans,n-a[1][i]-a[0][j]b[{j,i}]);for(intj0;jn;j)if(b.find({cop[j].second,i})b.end()cop[j].second!i){ansmin(ans,n-a[1][i]cop[j].first);break;}}coutans\n;}signedmain(void){ios::sync_with_stdio(0),cin.tie(0);tread();while(t--)does();return0;}注关于for(int i1;in;i) cop.push_back({-a[0][i],i});一行因为要从大到小排序所以取负最后本来应为n-a[1][i]-cop[j].first但是因为前面已经取负所以是n-a[1][i]cop[j].first。后记同步发表于个人 洛谷专栏 作为 题解仅供参考。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Linux(CentOS)安装Nginx图文教程 2026/9/28 4:54:02

Linux(CentOS)安装Nginx图文教程

1、安装依赖 1 sudo yum install yum-utils 2、创建仓库文件 在 /etc/yum.repos.d 目录下创建仓库文件 nginx.repo,并在文件中添加以下内容: 1 sudo vim /etc/yum.repos.d/nginx.repo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [nginx-stable] namengi…

阅读更多 →
【OpenMesh】如何使用OpenMesh创建项目 2026/9/28 4:54:02

【OpenMesh】如何使用OpenMesh创建项目

Obj文件与Off文件的转换()在网上找到的代码, 它可以接受off格式的文档文件, 它不可以接受obj格式的文档文件。而我的数据是obj格式的文档文件到了这个时候就需要做转换工作了。obj格式的文档文件和off格式的文档文件它们基本的样子是一致的。如果你这里有…

阅读更多 →
光模块从里到外:核心组成、技术拆解与mlxlink诊断实操 2026/9/28 4:54:02

光模块从里到外:核心组成、技术拆解与mlxlink诊断实操

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
24、DDR热管理:DDR热模型与热仿真、热节流策略、高通平台热管理方案 2026/9/28 4:54:02

24、DDR热管理:DDR热模型与热仿真、热节流策略、高通平台热管理方案

各位做DDR设计的兄弟,咱们今天聊个很现实的问题——热管理。说实话,DDR这玩意儿,跑得越快越烫。我见过不少项目,功能验证全过了,一上高温老化测试,DDR直接罢工。为什么?热没管好。你想想看&…

阅读更多 →
Java面试:MySQL索引优化,这样答稳过 2026/9/28 4:54:01

Java面试:MySQL索引优化,这样答稳过

Java面试中,MySQL索引优化几乎是必问项。答得好,直接证明你有实战经验;答不好,前面Java基础再扎实也容易被压价。很多人栽在这题,不是因为不懂,而是回答太散、太理论。下面这套答法,帮你稳过。一…

阅读更多 →
网站最近不收录?别被天价建站报价忽悠,3招自查 2026/9/28 4:53:55

网站最近不收录?别被天价建站报价忽悠,3招自查

网站最近不收录?别被天价建站报价忽悠,3招自查 找建站公司怕被坑高价,这是很多老板心里最忌惮的事。市面上那些张嘴就是五万八万的建站报价,往往夹杂着大量无效服务,让你花了钱却没换来流量。当你的网站最近不收录,第一反应不是换服务器,而是去审视之…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉