QUTOJ 1363 麻烦的小卓 思维

1363: 麻烦的小卓

时间限制: 1 Sec  内存限制: 128 MB
提交: 223  解决: 57

题目描述

 小卓同学一直苦于单身,这天他终于鼓起勇气给自己心仪的女生买了一串珍珠项链(项链首尾相连), 当他拿到项链之后发现每个珍珠的颜色不一致(假定只有黄色和白色两种),黄白分布是任意的, 现在他能进行两种操作

      1.选取一个珍珠换成自己喜欢的颜色

      2.交换项链上两个珍珠的位置;

  请问,小卓同学最少操作几次才能够使项链中的颜色交替分布

  注:如果永远不能达到小卓同学想要的情况,输出: What a pity!

输入

多组数据

  第一行输入n表示珍珠项链的长度 ( 3 <=n<=100 000);

  第二行输入长度为n的字符串, ‘w’表示白色珍珠,’y’表示为黄色珍珠;

输出

 最少的操作次数

样例输入

4
wyyw3
wyw
6
wwwwww

样例输出

1
What a pity!
3
思路:要让我们最小的步数去颜色交替,由于会成环,所以当有奇数个珍珠时一定不可以交替,直接特判.
当为偶数时,珍珠最后的交替结果一定是 wywywy... 或 ywywyw...其中的一种,那么我们就分别将给定的序列与最后结果的两种可能序列比对,如果原来的位置为y
而我们是w 那么w的操作数要+1,反之y+1。
对两种序列比对完后,我们每次取的都是w和y的最大值,因为min(w,y)的次数是通过交换使序列交替,而剩下的那些需要我们去改变其颜色,最后再取两种操作中
最小的即可.
#include
#include
#include
using namespace std;
char s[100010];
int n;
int main()
{   while(scanf("%d",&n)!=EOF)
     {    scanf("%s",s);//还有我想知道为啥邀请赛的时候我getchar+gets过不看了这个题;
          if(n&1)
          {
          printf("What a pity!\n");
          continue;}
          char c;
          int y=0,w=0,ans1,ans2;
          c='w';
          for(int i=0;i

你可能感兴趣的:(QUTOJ 1363 麻烦的小卓 思维)