题目

题意:

一个01串,AB两个人轮流删去一个字符,直到只剩两个,A先手。最后剩的两位组成一个二进制数,A要使其最小,B要使其最大。

有一些部分不知道原来是什么,用?表示,求所有的可能里,最后剩下的两个字符。

题解:

我太弱了,WA了好几次,只有110组数据,我错在了107……

首先两人的最优策略都是从左到右删,A先删1,B先删0.

如果串长度为奇数,则A可以多删一次1.所以要先减去。

假如原串可能1多于0或0多余1,就可能剩下11和00.

如果1和0数量可能相等,按照1和0可以出现的最后的位置确定能否剩下01和10.

//Time:62ms
//Memory:200KB
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
#include <map>
#include <queue>
#include <set>
#define MAXN 200010
#define INF 1000000007
#define MP(x,y) make_pair(x,y)
#define FI first
#define SE second
#define EPS 1e-8
using namespace std;
char str[MAXN];
int vi[10]={0};
int main()
{
while(scanf("%s",str)==1)
{
memset(vi,0,sizeof(vi));
int cn[3]={0},len,pos[2]={-1,-1};
len=strlen(str);
for(int i=0;str[i];++i)
if(str[i]=='0') ++cn[0],pos[0]=i;
else if(str[i]=='1') ++cn[1],pos[1]=i;
else ++cn[2];
if(len&1)
if(cn[1])
--cn[1];
else if(cn[2]) --cn[2];
if(cn[2]+cn[0]>cn[1]) vi[0]=1;
if(cn[2]+cn[1]>cn[0]) vi[3]=1;
if(abs(cn[0]-cn[1])<=cn[2])
{
if(cn[0]<len/2) vi[(pos[1]<len-1)?2:1]=1;
if(cn[1]<len/2) vi[(pos[0]<len-1)?1:2]=1;
if(cn[2]==0)
if(pos[1]>pos[0]) vi[1]=1;
else vi[2]=1;
}
for(int i=0;i<4;++i)
if(vi[i])
printf("%d%d\n",i>>1,i&1);
//printf("\n");
}
return 0;
}

CodeForces 135C C. Zero-One的更多相关文章

  1. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  2. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  3. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  4. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  5. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  6. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  7. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

  8. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

  9. CodeForces - 148D Bag of mice

    http://codeforces.com/problemset/problem/148/D 题目大意: 原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠.谁先抓到白色老鼠谁就赢. 王妃每次 ...

随机推荐

  1. 星际争霸反作弊AG对战平台_支持108,113

    星际争霸反作弊AG对战平台_支持108,113,116 强大的星际反作弊功能,对战神器,让玩家公平对战 目前腾讯对战,浩方对战,VS对战平台都有星际外挂,AG平台什么都不干专门反外挂,希望热爱星际的玩 ...

  2. sql server 2008 索引

    微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclustered index,也称非聚类索引.非簇集索引) 我们举例来 ...

  3. MYSQL 二进制还原

    解决方法: mysqlbinlog bin_log_file_path_and_name | mysql -uroot -p 如: mysqlbinlog E:\DB\mysql_log\mysql_ ...

  4. keil MDK编译器(V4.01)与H-JTAG的问题

    前一阵子转投到MDK下面做开发,因为公司以前都用h-jtag做下载仿真工具,用的h-jtag版本为V0.9,我拿以前在ads1.2中编译成功的程序,稍作修改,在mdk下编译成功,仿真也没有问题,但下载 ...

  5. 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

    很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...

  6. JavaEE Tutorials (22) - 事务

    22.1Java EE应用中的事务35222.2什么是事务35322.3容器托管事务353 22.3.1事务属性354 22.3.2回滚容器托管事务357 22.3.3同步会话bean的实例变量357 ...

  7. chapter 10 统计检验

    1.permutation test 用途:用于检验两组数据是否出生于同一分布 思路:如果产生于同一分布,两组数据混合,重新排列后,计算的基于两组数据的函数值(均值,中位数,方差等,下面程序中使用f指 ...

  8. Centos6.5 telnet wireshark

    yum -y install telnet-server telnet vim /etc/xinted.d/telnet disable = no vim /etc/pam.d/remote #aut ...

  9. ceph rpm foor rhel6

    ceph-0.86-0.el6.x86_64.rpm 09-Oct-2014 10:00 13M ceph-0.87-0.el6.x86_64.rpm 29-Oct-2014 13:38 13M ce ...

  10. Ubuntu 12.04下安装ibus中文输入法

    这是最完整的安装方法: ibu是一个框架,可以支持多种输入法,像是pinyin,五笔等. 1,安装ibus框架 终端输入以下命令: sudo apt-get install ibus ibus-clu ...