QUTOJ 1363 麻烦的小卓 思维
来源:互联网 发布:mac电脑翻墙教程 编辑:程序博客网 时间:2024/05/17 21:03
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<stdio.h>#include<string.h>#include<algorithm>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<n;i++) { if(c!=s[i]) { if(c=='w') y++; else w++; } if(c=='w') c='y'; else c='w'; } ans1=max(y,w); c='y'; w=0; y=0; for(int i=0;i<n;i++) { if(s[i]!=c) { if(c=='w') y++; else w++; } if(c=='w') c='y'; else c='w'; } ans2=max(y,w); printf("%d\n",min(ans1,ans2)); } return 0;}
1 0
- QUTOJ 1363 麻烦的小卓 思维
- QUTOJ-1363 麻烦的转盘(概率dp)
- QUTOJ 1362 麻烦的转盘 dp入门
- QUTOJ 1356: 小E和1 思维暴力
- 看似简单的小麻烦
- 青岛理工大学比赛 11.27 K: 麻烦的小卓
- 小麻烦
- JS中遇到的小麻烦
- “发送至Onenote”惹来的小麻烦
- 学生信息管理系统的小麻烦
- cocos2dx加载texturepacker遇到的小麻烦
- QUTOJ 1353: yeweiyang的打印服务 二分
- QUTOJ-1359 小菜的难题(二分)
- QUTOJ 飘飘和小石(简单搜索+暴力)
- QUTOJ-1356 小E和1(规律)
- QUTOJ 1357:小E与计算器 暴力搞
- qutoj 1357 小E与计算器(模拟)
- 小Bug大麻烦
- crontab 定时任务
- 命令模式
- 回文数
- java编程思想第三章 操作符 笔记
- Android中Recyclerview使用10----Recyclerview外面嵌套ScrollView滑动事件冲突
- QUTOJ 1363 麻烦的小卓 思维
- 如何在 Java 中正确使用 wait, notify 和 notifyAll
- Tomcat启动过程
- 一分耕耘,一分收获——自考总结
- 平台demo
- MySQL 常用语句
- 浅谈前端与SEO
- [综合] 一个简单图形界面框架XYGui的设计与实现 (二)
- Unity3D开发小贴士(十四)JsonUtility