题目

题意:

一个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. 16-GDBT(MART) 迭代决策树入门教程 | 简介

    转载:http://blog.csdn.net/w28971023/article/details/8240756 GBDT(Gradient Boosting Decision Tree) 又叫 M ...

  2. Docker 基于已有镜像的容器创建镜像

    Docker 基于已有镜像的容器创建镜像: docker:/root# docker run -it januswel/centos /bin/bash docker exec -it januswe ...

  3. 转载文章:Windows Azure 基础结构服务上的 Microsoft Dynamics NAV 和 Microsoft Dynamics GP!

    Windows Azure 基础结构服务(虚拟机和虚拟网络)可提供按需基础结构,该基础结构可进行伸缩以适应不断变化的业务需求.无论您是在虚拟机中创建新应用程序,还是运行现有应用程序,我们都将按分钟收费 ...

  4. paip.QQ音乐导出歌单总结

    paip.QQ音乐导出歌单总结 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net/attilax ...

  5. ios 常用宏(copy)

    分享一下我现在用的 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 3 ...

  6. 关于oracle的certview

    前两天去参加oracle  11g  的两门考试(1Z0-051和1Z0-052),在家看了好几遍题库,我本来想着上午一门,下午考一门,但是我嫌着麻烦,就预约一下午考完两门.在考试完一门后,发现成绩不 ...

  7. BZOJ 1024 SCOI 2009 生日快乐 深搜

    题目大意:有一块蛋糕,长为X,宽为Y.如今有n个人来分这块蛋糕,还要保证每一个人分的蛋糕的面积相等.求一种分法,使得全部的蛋糕的长边与短边的比值的最大值最小. 思路:刚拿到这个题并没有什么思路.可是定 ...

  8. JS学习笔记(四)常用对象

    Error // 语法 throw new Error("消息"); 类似于C#中的Exception对象 // alert(num); try { throw new Error ...

  9. 关于nvarchar与varchar的区别

    varchar(x),  nvarchar(x)这里面的x指的是最大的列宽  如果存储的字符串没达到最大列宽  那么他也只获得对应的列宽的存储空间  并不意味着系统就会给它分配x的空间给它 varch ...

  10. VB.Net常用数学函数整理

      System.Math 类中定义了用于数学计算的函数.Math 类包括三角函数.对数函数和其他常用数学函数.下列函数是在 System 名称空间的 Math 类中定义的函数. 注意:要使用这些函数 ...