poj1063 解题报告(poj 1063 analysis report)
题目:
一个循环序列,其中有若干0和1,两个间隔为1(即间隔一个数)的数的位置可以互换。问题是,给定一个这样的队列,判断是否可以将所有的0和1分别归拢到一起,即可以将此循环序列切断为两个序列,一个里面只有1,一个里面只有0.
思考:
题目不难,刚开始没有发现公式,考虑到的情况少了,所以wa了,后来考虑到所有情况,并总结了公式,就ac了。
证明:
引理1:相邻的两个数只有10,01,11,00 四种情况,其中00,11这两种情况对于整个循环序列没有影响。
证明:若存在11或00这两种组合,显然,通过在不同位置上执行数字互换操作(题目里所提),这种组合可以被移动到循环序列的任意指定位置。因此,当循环序列里面只有11和00时,我们可以非常简单地移动所有11(或00),让它们相连,这样循环序列就可以分成两个全0和全1的子序列。所以,11和00的存在不影响最终结果。
题目证明
1.如果循环序列的长度是奇数,那么此循环序列一定可以切断为两个序列,一个里面只有1,一个里面只有0.
证明:如果长度是奇数,那么一定有偶数个1+奇数个0,或者偶数个0+奇数个1.如果1和0的个数不相等,那么一定有11或00这种情况存在,因为n个0或1无法将n+1个1或0分开(注意,是循环序列,头和尾之间也需要插入数字分开)。又因为引理1,所以存在的00和11可以被消去,即不考虑,那么剩下的循环序列长度还是奇数,因此还存在00或11。这样一直消去,直到长度为1,长度为1的循环序列是一定满足要求的。
2.如果循环序列的长度是偶数,若0或1在偶数位上的数目与在奇数位上的数目之差小于等于1,那么此循环序列一定可以切断为两个序列,一个里面只有1,一个里面只有0.
证明:如果长度是偶数,假设里面有m个01,n个10(剩下的00和11根据引理1可以不考虑)。如果一个10和一个01相邻,则可以通过换位操作将1001变成1100。若m和n相等,则最后经过消去,没有数字剩下,因此这是个循环序列;若有m和n相差1,则最后经过消去,只剩下一个01或10,这也是一个循环序列;若m和n相差大于1,则剩下k个10或01,k>=2,例如:1010,这不是一个循环序列。所以,只有m和n的差小于等于1时,循环序列才满足题目要求。不失一般性地,设10中的1处于奇数位,01中的1处于偶数为,则只有在偶数位上的数目与在奇数位上的数目之差小于等于1时,才满足题目要求。
3.代码
1 #include<stdio.h> 2 #include<math.h> 3 int main() 4 { 5 int d[30],n,c; 6 scanf("%d",&n); 7 while(n>0) 8 { 9 int ow=0,ew=0; 10 scanf("%d",&c); 11 for(int i=0;i<c;i++) 12 scanf("%d",&d[i]); 13 if(c%2==1) 14 printf("YES\n"); 15 else 16 { 17 for(int i=0;i<c;i++) 18 { 19 if(d[i]==0) 20 { 21 if(i%2==0) 22 ow++; 23 else 24 ew++; 25 } 26 } 27 if(abs(ow-ew)<2) 28 printf("YES\n"); 29 else 30 printf("NO\n"); 31 } 32 n--; 33 } 34 return 0; 35 }
转载于:https://www.cnblogs.com/hrlnw/archive/2013/01/17/2865509.html
poj1063 解题报告(poj 1063 analysis report)相关推荐
- poj解题报告——poj 1528 Perfection
原题入口 poj 1528 Perfection 题目描述 Perfection Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- 解题报告 poj 3207
1. 题目 POJ 3207 2. 题目实质 平面上,一个圆,圆的边上按顺时针放着n个点.现在要连m条边,比如a,b,那么a到b可以从圆的内部连接,也可以从圆的外部连接.问 ...
- 解题报告 poj 2109
话说,那个题的中文翻译是:开一个高精度数 p 的 n 次方根 k . #include <cstdio> #include <cmath>int main() {double ...
- POJ 2800 垂直直方图 解题报告
POJ 2800 垂直直方图 解题报告 编号:2800 考查点:简单计算题 思路: 用gets()读入4行数据,然后按字符统计,显示的时候有点小处理即可. 提交情况: 感觉POJ的测试数据有点骗人 ...
- POJ 2745 显示器 解题报告
POJ 2745 显示器 解题报告 编号:2745 考查点:模拟 思路:抽象出来,计算器显示是7个笔画,然后建立数组表示各笔画被覆盖情况,不过这个是我看了书之后实现的,方法果真经典. 提交情况:比 ...
- Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)
http://blog.csdn.net/geniusluzh/article/details/6619575 在说Tarjan算法解决桥和边双连通分量问题之前我们先来回顾一下Tarjan算法是如何求 ...
- TensorRT Analysis Report分析报告
TensorRT Analysis Report 一.介绍 TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟.高吞吐率的部署推理.TensorRT可 ...
- POJ 2054 Color a Tree解题报告
题干 Bob is very interested in the data structure of a tree. A tree is a directed graph in which a spe ...
- POJ 1797 Heavy Transportation 解题报告
分类:图论,生成树,最短路,并查集 作者:ACShiryu 时间:2011-7-28 地址:ACShiryu's Blog Heavy Transportation Time Limit: 3000M ...
最新文章
- java处理中文字符_Java中文字符处理的四大迷题
- 据我所知,这是第一个完整实现运动分割、动态目标追踪等的「开源」动态SLAM系统!...
- 程序员求职面试 HR问的问题都能轻松答出,offer分分钟到手
- Tkinter的Menubutton组件
- yii2 behavior 排除某个方法_中学科目二 | 教学方法
- 深度学习笔记(40) YOLO
- Hadoop的I/O操作
- 计算机考研问题,考研计算机常见的6个问题
- MySQL 字符集支持
- git的历史版本拉分支、回撤revert、回退reset
- 自定义snippet(代码段)就可以极大的提高你的开发效率 VScode快速一键生成html、vue、jsx、ajax、sass、docker等代码片段
- java数据类型的转换函数_JAVA中常用数据类型转换函数
- HBase中MVCC的实现机制及应用情况
- 指示灯亮着,但是右边的数字小键盘不可用
- hdu 5101 n集合选2个不同集合数使和大于k
- SIFT算法学习总结
- 扩展欧几里得模板+例题
- 蔡凯龙:跨界是一种寻求人生宽度的方式
- matlab非线性拟合算检验,matlab非线性拟合求参数怎样确定初始值
- 蒙德里安森林算法_蒙德里安的格子画教案