【思维】Codeforces Beta Round #97 (Div. 1) C
来源:互联网 发布:苹果手机快速打开数据 编辑:程序博客网 时间:2024/06/12 01:35
Problem Description
给你一个串,只有’0’, ‘1’, ‘?’三个字符构成,’?’代表它可能是’0’or’1’。
两个人在玩游戏,A这个人删除一个字符想让这个串尽可能的小,B这个人删除一个字符想让这个串尽可能的大。A先操作。直到剩下的字符还有两个的时候,停止操作。输出所有的可能结果,重复的只输出一遍。
例如1?1,串可能是111,或者101。A先操作,111的时候删除第一个1,此时变成11。101的时候删除第一个1此时变成01。所以输出11 和 01
思路:
结果最多只有四种情况,00,01,10,11。我们就得思考什么情况下可以得到这四种情况。
假设一个串的长度是len。那么A删除(len-2)/2 + (len-2)%2个字符,B删除(len-2)/2个字符。思考一下,如果有1,A肯定优先删除1(为了串小)。如果有0,B肯定优先删除0(为了串大)。
当删除过程中全是1的时候,无论如何结果都是11。当删除过程中全是0的时候,无论如何结果都是00。
只有当删除剩下 一个1和一个0的时候这时候得考虑结果是01,还是10。
如果最后一个字符是1,那么A肯定得删除最后一个字符前面的1(为了串小),所以结果01。
如果最后一个字符是0,当0前面有1的时候B肯定得删除1前面的0(为了串大),否则它删除1后面任意一个0结果都一样。所以结果10。
‘?’的处理,看代码就能明白。
#include<bits/stdc++.h>using namespace std;#define maxn 100055char s[maxn];int vis[5][5];int main(){ int len, ul, ur, i, j; while(~scanf("%s", s)) { len = strlen(s); ul = (len-2)/2 + (len-2)%2; ur = (len-2)/2; int Zero = 0, One = 0, x = 0; for(i = 0; i < len; i++) { if(s[i] == '0') Zero++; if(s[i] == '1') One++; if(s[i] == '?') x++; } Zero -= ur;//0还剩下几个 One -= ul;//1还剩下几个 char l = s[len-1]; memset(vis, 0, sizeof(vis)); for(i = 0; i <= x; i++)//枚举'?'的分配 { int t1 = Zero + i;//i代表0,x-i代表1 int t2 = One + x-i; //t1+t2 肯定等于 2 if(t1 == 1 && t2 == 1) {//01 或者 10 if(l=='1' || (l=='?' && i!=x))//代表能有一个?可以变成1 vis[0][1]++; if(l=='0' || (l=='?' && i!=0))//代表能有一个?可以变成0 vis[1][0]++; } if(t1 >= 2) vis[0][0]++;//这时候0多了 if(t2 >= 2) vis[1][1]++;//这时候1多了 } for(i = 0; i < 2; i++) { for(j = 0; j < 2; j++) { if(vis[i][j]) printf("%d%d\n", i, j); } } } return 0;}
阅读全文
0 0
- 【思维】Codeforces Beta Round #97 (Div. 1) C
- Codeforces Beta Round #32 (Div. 2) C (math+思维)
- 线段树Codeforces Beta Round #99 (Div. 1)C
- Codeforces Beta Round #96 (Div. 1) C. Logo Turtle (DP)
- Codeforces Round #353 (Div. 2) C 思维
- Codeforces Beta Round #97 (Div. 2)
- Codeforces Beta Round #97 (Div. 2)
- Codeforces Beta Round #97 (Div. 2)
- Codeforces Beta Round #97 (Div. 2)
- Codeforces Beta Round #83 (Div. 1 Only)
- Codeforces Beta Round #35 (Div. 2) C (BFS~水~)
- Codeforces Beta Round #89 (Div. 2) C. Fancy Number
- Codeforces Beta Round #95 (Div. 2) A B C E
- Codeforces Beta Round #16 (Div. 2 Only)——C
- Codeforces Beta Round #18 (Div. 2 Only)——C
- Codeforces Beta Round #34 (Div. 2)——C
- Codeforces Beta Round #49 (Div. 2)——C
- Codeforces Beta Round #74 (Div. 2 Only)——C
- C# 远程连接局域网内服务器之后读取文件新建路径
- maven学习笔记
- git使用教程
- cupboard2,rxcupboard2的使用
- Android APK 反编译最新工具及方法
- 【思维】Codeforces Beta Round #97 (Div. 1) C
- [转]Java图形化界面设计——布局管理器之FlowLayout(流式布局)
- 关于java中常用知识点
- jsoup获取图片并下载
- HTML DOM addEventListener() 方法
- python核心编程第二版第十章学习笔记
- alibaba 代码规范神器
- Spring Boot学习总结(11)——SpringBoot的Starter依赖包及作用
- android设备id