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

cf rating 1600

E. Making Anti-Palindromes

地址跳转

若n为奇数或某个数字出现的次数>n/2
不合法

先统计出所有的非法对
发现通过一次交换 非法对的个数可能少2也可能少1
尽可能多地让非法对的个数少2

记最大的非法对的字符是x,总非法对数为k,x的对数为cntx
若cntx>=k/2
那么需要的交换次数为cntx,因为每对x都需要一次交换

若cntx<=k/2
那么需要的交换次数为k/2
发现k/2次交换,每次均可以让非法对的个数少2
(k为奇数时,最后一次交换只能少1,所以答案为k/2上取整)

先判掉不合法的情况
n为奇数某个字符出现的次数>n/2

memset(num,0,sizeof(num));cin>>n;for(inti=1;i<=n;i++){cin>>c[i];num[c[i]-'a']++;}if(n%2){cout<<-1<<endl;return;}intmaxx=0;for(inti=0;i<26;i++){if(num[i]>maxx)maxx=num[i];}if(maxx>n/2){cout<<-1<<endl;return;}

统计出总的非法对数,和最大的非法对数的字符所对应的非法对数

memset(num,0,sizeof(num));for(inti=1;i<=n/2;i++){if(c[i]==c[n-i+1])cnt++,num[c[i]-'a']++;}maxx=0;for(inti=0;i<26;i++){if(maxx>num[i])maxx=num[i];}

通过比较总的非法对数非法对数最多的字符所对应的非法对数
来得出需要交换的次数

if(maxx*2<=cnt)cnt=(cnt+1)/2;elsecnt=maxx;cout<<cnt<<endl;

完整代码

#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'usingnamespacestd;constintN=200010;intn,cnt;charc[N];intnum[30];voidsolve(){cnt=0;memset(num,0,sizeof(num));cin>>n;for(inti=1;i<=n;i++){cin>>c[i];num[c[i]-'a']++;}if(n%2){cout<<-1<<endl;return;}intmaxx=0;for(inti=0;i<26;i++){if(num[i]>maxx){maxx=num[i];}}if(maxx>n/2){cout<<-1<<endl;return;}memset(num,0,sizeof(num));for(inti=1;i<=n/2;i++){if(c[i]==c[n-i+1])cnt++,num[c[i]-'a']++;}maxx=0;for(inti=0;i<26;i++){if(num[i]>maxx)maxx=num[i];}if(maxx*2<=cnt)cnt=(cnt+1)/2;elsecnt=maxx;cout<<cnt<<endl;return;}signedmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);intt;cin>>t;while(t--)solve();return0;}

G. Hits Different

地址跳转

f[i][j]=f[i-1][j-1]+f[i-1][j]-f[i-2][j-1];
当i为0时,会访问f[-1][0],特判掉
根据状态转移写dp

constintN=2001;inta[N][N],b[N*N];intcnt=1;for(inti=1;i<=2000;i++){for(intj=1;j<=i;j++){a[i][j]=cnt*cnt+a[i-1][j-1]+a[i-1][j]-a[i-2][j-1];b[cnt]=a[i][j];cnt++;}}

预处理后,根据读入
O ( 1 ) O(1)O(1)输出

intn;cin>>n;cout<<b[n]<<endl;

完整代码

#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'usingnamespacestd;constintN=2001;inta[N][N],b[N*N];voidsolve(){intn;cin>>n;cout<<b[n]<<endl;return;}signedmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);intcnt=1;for(inti=1;i<=2000;i++){for(intj=1;j<=i;j++){a[i][j]=(i==1)?1:cnt*cnt+a[i-1][j-1]+a[i-1][j]-a[i-2][j-1];b[cnt]=a[i][j];cnt++;}}intt;cin>>t;while(t--)solve();return0;}

E. Round Dance

地址跳转

并查集

intfind(intx){if(fa[x]!=x)fa[x]=find(fa[x]);returnfa[x];}

读入每个数

for(inti=1;i<=n;i++){cin>>a[i],fa[i]=i,du[i]=0;}

构建并查集
并给每个数的度数打上标记

for(inti=1;i<=n;i++){intu=i,v=a[i];fa[find(u)]=find(v);!vis[{u,v}]&&(du[u]++,du[v]++);vis[{u,v}]=vis[{v,u}]=1;}

统计有多少个集合
统计有多少个度为1的点

for(inti=1;i<=n;i++){st.insert(fa[i]);if(du[i]==1)cnt++;}

最大值即为set st 的数量
每两个cnt为1的点,就可以首尾相连,减去一个集合数量
最小值为min(st.size(),st.size()-cnt/2+1);

cout<<min(st.size(),st.size()-cnt/2+1)<<' '<<st.size()<<endl;

完整代码

#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'usingnamespacestd;constintN=200010;set<int>st;map<pair<int,int>,bool>vis;intn,cnt;intdu[N];intfa[N],a[N];intfind(intx){if(fa[x]!=x)fa[x]=find(fa[x]);returnfa[x];}voidsolve(){cin>>n;st.clear();cnt=0;vis.clear();for(inti=1;i<=n;i++){cin>>a[i],fa[i]=i,du[i]=0;}for(inti=1;i<=n;i++){intu=i,v=a[i];fa[find(u)]=find(v);!vis[{u,v}]&&(du[u]++,du[v]++);vis[{u,v}]=vis[{v,u}]=1;}for(inti=1;i<=n;i++){st.insert(find(i));cnt+=(du[i]==1);}cout<<min(st.size(),st.size()-cnt/2+1)<<' '<<st.size()<<endl;return;}signedmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);intt;cin>>t;while(t--)solve();return0;}
http://www.jsqmd.com/news/1358815/

相关文章:

  • 零基础学IT,第一家就该看图灵课堂:2026年线上转行指南 - 天下观知
  • 从领主系统到万里长城:生存建造游戏核心技术实现与优化
  • AI智能体评测演进:从基准测试到沙盒评估的完整指南
  • 2026 邯郸房屋漏水渗水修缮选择指南:厨卫、外墙、屋顶、飘窗阳光房渗漏怎么高效处理 - 筑宅安
  • Java进制转换:Integer.toString()方法详解与实践
  • Google投放代运营选哪家好 2026十大实力测评 避坑优选攻略 - myqiye
  • Godot积木编程插件:零代码游戏开发入门与实现原理
  • AI大模型应用开发工程师:开启你的技术收藏与学习之旅!
  • 开源智能体框架OpenClaw与腾讯云ADP企业级集成实战
  • 从选片指导到修改意见沟通:浅山目的地婚礼后期精修的全流程服务细节 - 商业资讯新知
  • 2026合肥电大中专自己怎么报名?个人不能直接报,需通过分校或教学中心(附正规报名渠道) - 最新资讯
  • 基于GPU与Docker部署OpenClaw大模型框架并接入飞书、Discord实战指南
  • 从数字资产到3D打印:拆解可动人偶模型的结构设计与工程实践
  • Cocos2d游戏开发实战:从零构建泡泡龙经典消除游戏
  • 高效智能的浏览器资源嗅探工具:猫抓一站式解决方案
  • NS模拟器终极管理方案:3分钟搞定Yuzu、Ryujinx、Eden、Citron一键安装更新
  • 光固化防腐管道行业口碑推荐强势出炉,零套路避坑,实力测评看这篇就够 - myqiye
  • Java面试结构化回答:从HashMap到JVM的深度解析与实战技巧
  • 保山全屋漏水别瞎修!9大渗水场景一次讲透,省心修缮不踩坑 - 宅安选房屋修缮
  • 绝区零自动化神器:3步搞定游戏日常,解放双手轻松玩转
  • 如何免费扩展Windows屏幕空间:Parsec VDD虚拟显示器完整指南
  • 2026年机用丝锥专业制造商:YAMAWA丝锥高精度耐磨之选 - 优企名品
  • 2026蚌埠成人高考/高起专怎么报名?推荐合肥经济技术职业学院! - 小张zc
  • 巴中全屋漏水别瞎修!9大渗水场景一次讲透,省心修缮不踩坑 - 宅安选房屋修缮
  • Spring框架父子容器机制解析与应用实践
  • 口碑不错的二手抛丸机厂家,避坑攻略与价格透明解析 - mypinpai
  • 如何快速解锁AMD Ryzen处理器隐藏性能:3步掌握SMU调试工具
  • Godot Orchestrator视觉编程入门:30分钟实现首个交互场景
  • 2026 年腐熟有机肥优选企业:安徽淇淋农业生物科技有限公司 - 安互工业信息
  • 尼康Z30微单相机全面评测:入门级APS-C画质与视频实战指南