可以将相同的人数分块存在数组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 ;
}

最新文章

  1. spring mvc controller间跳转 重定向 传参 (转)
  2. ggplot2包--R可视化
  3. JavaScript 常用算法
  4. dom4j创建xml
  5. 在特定的action里使用validates
  6. Large Object Heap内存碎片在.NET 4.5中的改进
  7. BinaryReader和BinaryWriter的leaveOpen参数 z
  8. CSS经典布局-圣杯布局、双飞翼布局
  9. git使用的常见命令(一)
  10. Kafka设计解析(八)- Exactly Once语义与事务机制原理
  11. 【mysql】mysql存储引擎
  12. vue购物车实战项01
  13. Linux系统——程序员跳槽必备
  14. day2 二、编程语言、python解释器和变量
  15. poj3279(dfs+二进制枚举思路)
  16. CentOS安装JDK9
  17. 分析params_s方法
  18. 电子书推荐--《Python灰帽子》,python黑客编程
  19. Spring boot分层和基本概念
  20. JAVA基础之——JDK包分析concurrent

热门文章

  1. HTML5 新增元素梳理
  2. UVA - 1153 Keep the Customer Satisfied(顾客是上帝)(贪心)
  3. &lt;老古董&gt;1962年的线性支持向量机解法
  4. Vue.js(2)- 过滤器
  5. __getattr__在python2.x与python3.x中的区别及其对属性截取与代理类的影响
  6. 多线程进阶——JUC并发编程之CountDownLatch源码一探究竟
  7. mysql初始化出现:FATAL ERROR: Neither host &#39;DB01&#39; nor &#39;localhost&#39; could be looked up with
  8. 51nod 1346:递归
  9. http与socket
  10. 写excel文件-xlsxwriter包的使用