ZJNU 1531 - 丢手绢--中级
2024-10-08 18:33:02
可以将相同的人数分块存在数组gp中先
例如RRGGGRBBBBRR
则gp[1~5]={2,3,1,4,2}
首先可以知道,如果要让没有相邻的相同,只需要每个gp[i]/2向下取整即可得出最少需要改变的个数
例如RGGGR,只看G,只需要改变中间的G即可
例如RGGGGR,只看G,可以选择改变1和3或者2和4位置的G、
最后,考虑首尾成环对答案的影响
例如RRRGRRR
gp[1~3]={3,1,3}
则由上面的说法可以得到答案为3/2+1/2+3/2=1+0+1=2人
但实际上首尾连接后有6个R坐在一起
至少需要改变3个人才能满足题意
另,如果所有人都同色
例如RRRRR
根据上面说法只需要改变5/2=2人
即改变2和4位置的人
但是这样1和5首尾相连后会导致同色的人坐在一起
这种情况下答案需要特判为(5+1)/2=3人
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
ios::sync_with_stdio();cin.tie();
int T,t,N,m,i,gp[],ans;
string s;
cin>>T;
for(t=;t<=T;t++){
cin>>N>>s;
s=" "+s;//下标移位
ans=m=;
for(i=;i<=N;i++)
if(s[i]==s[i-])
gp[m]++;
else
gp[++m]=;
if(s[]==s[N]&&N!=)
if(m!=){
gp[]+=gp[m];
m--;
}
else
gp[]++;
for(i=;i<=m;i++)
ans+=gp[i]/;
cout<<"Case #"<<t<<":\n"<<ans<<'\n';
} return ;
}
最新文章
- spring mvc controller间跳转 重定向 传参 (转)
- ggplot2包--R可视化
- JavaScript 常用算法
- dom4j创建xml
- 在特定的action里使用validates
- Large Object Heap内存碎片在.NET 4.5中的改进
- BinaryReader和BinaryWriter的leaveOpen参数 z
- CSS经典布局-圣杯布局、双飞翼布局
- git使用的常见命令(一)
- Kafka设计解析(八)- Exactly Once语义与事务机制原理
- 【mysql】mysql存储引擎
- vue购物车实战项01
- Linux系统——程序员跳槽必备
- day2 二、编程语言、python解释器和变量
- poj3279(dfs+二进制枚举思路)
- CentOS安装JDK9
- 分析params_s方法
- 电子书推荐--《Python灰帽子》,python黑客编程
- Spring boot分层和基本概念
- JAVA基础之——JDK包分析concurrent
热门文章
- HTML5 新增元素梳理
- UVA - 1153 Keep the Customer Satisfied(顾客是上帝)(贪心)
- <;老古董>;1962年的线性支持向量机解法
- Vue.js(2)- 过滤器
- __getattr__在python2.x与python3.x中的区别及其对属性截取与代理类的影响
- 多线程进阶——JUC并发编程之CountDownLatch源码一探究竟
- mysql初始化出现:FATAL ERROR: Neither host &#39;DB01&#39; nor &#39;localhost&#39; could be looked up with
- 51nod 1346:递归
- http与socket
- 写excel文件-xlsxwriter包的使用