51nod 1393 0和1相等串(鸽巢原理)
2015-08-30 14:22
330 查看
1393 0和1相等串
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题
收藏
关注
给定一个0-1串,请找到一个尽可能长的子串,其中包含的0与1的个数相等。
Input
Output
Input示例
Output示例
曹鹏 (题目提供者)
鸽巢原理:桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,我们会发现至少会有一个抽屉里面至少放两个苹果。这一现象就是我们所说的“抽屉原理”。 抽屉原理的一般含义为:“如果每个抽屉代表一个集合,每一个苹果就可以代表一个元素,假如有n+1个元素放到n个集合中去,其中必定有一个集合里至少有两个元素。”
抽屉原理有时也被称为鸽巢原理。它是组合数学中一个重要的原理。
思路:转换到这个题上就可以这样理解,当0和1的差值与上一个0和1的差值相同时,那么他们之间的字符串中0和1的数目是相同的。求出最大的就行了。
点击打开链接
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题
收藏
关注
给定一个0-1串,请找到一个尽可能长的子串,其中包含的0与1的个数相等。
Input
一个字符串,只包含01,长度不超过1000000。
Output
一行一个整数,最长的0与1的个数相等的子串的长度。
Input示例
1011
Output示例
2
曹鹏 (题目提供者)
鸽巢原理:桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,我们会发现至少会有一个抽屉里面至少放两个苹果。这一现象就是我们所说的“抽屉原理”。 抽屉原理的一般含义为:“如果每个抽屉代表一个集合,每一个苹果就可以代表一个元素,假如有n+1个元素放到n个集合中去,其中必定有一个集合里至少有两个元素。”
抽屉原理有时也被称为鸽巢原理。它是组合数学中一个重要的原理。
思路:转换到这个题上就可以这样理解,当0和1的差值与上一个0和1的差值相同时,那么他们之间的字符串中0和1的数目是相同的。求出最大的就行了。
点击打开链接
</pre><pre name="code" class="cpp"><pre name="code" class="cpp">#include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> #include<stdlib.h> using namespace std; char str[1000100]; struct node{ int x; int y; int xans; int yans; }q[1000100]; int main(){ //freopen("3308_1.txt","r",stdin); //freopen("3308_2.out","w",stdout); while(scanf("%s",str+1)!=EOF){ int l = 0,r = 0; int len = strlen(str+1); for(int i=0;i<=len+10;i++){ q[i].x = 0; q[i].y = 0; q[i].xans = 0; q[i].yans = 0; } int maxx = 0; for(int i=1;str[i]!='\0';i++){ if(str[i] == '0'){ l++; }else{ r++; } if(l>r){ if(q[l-r].x == 0){ q[l-r].x = i; }else{ q[l-r].xans = i-q[l-r].x; if(maxx<q[l-r].xans){ maxx = q[l-r].xans; } } }else if(r>l){ if(q[r-l].y == 0){ q[r-l].y = i; }else{ q[r-l].yans = i-q[r-l].y; if(maxx<q[r-l].yans){ maxx = q[r-l].yans; } } }else{ if(maxx < i){ maxx = i; } } } printf("%d\n",maxx); } return 0; }
相关文章推荐
- Canvas和Bitmap的关系
- win10连接外接显示器后怎么使用音箱喇叭?
- progress.hpp
- MD5加密的简单使用
- MediaPlay和SoundPool
- HDOJ 1869 六度分离
- C语言入门学习视频
- Linux C标准IO库函数详解 一
- HTTP协议--处理状态和返回状态码含义
- .Net Reflection反射技术
- D、作弊揭发者-------(计蒜之道 测试赛)
- solr5.2.1环境搭建
- ViewController
- maven构建多模块的web项目
- JAVA进阶路线图
- centos6.5在VMware和Oracle VM VirtualBox下安装的区别
- Android eventbus开源框架(模仿)
- HDOJ 1548 A strange lift
- Android自学笔记之 MultiAutoTextView的功能、特殊属性、用法(与AutoTextView的区别和近似)
- Ubuntu14.04上配置hadoop