题目:

一个循环序列,其中有若干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)相关推荐

  1. poj解题报告——poj 1528 Perfection

    原题入口 poj 1528 Perfection 题目描述 Perfection Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...

  2. 解题报告 poj 3207

    1.        题目 POJ 3207 2.        题目实质 平面上,一个圆,圆的边上按顺时针放着n个点.现在要连m条边,比如a,b,那么a到b可以从圆的内部连接,也可以从圆的外部连接.问 ...

  3. 解题报告 poj 2109

    话说,那个题的中文翻译是:开一个高精度数 p 的 n 次方根 k . #include <cstdio> #include <cmath>int main() {double ...

  4. POJ 2800 垂直直方图 解题报告

    POJ 2800 垂直直方图 解题报告 编号:2800   考查点:简单计算题 思路: 用gets()读入4行数据,然后按字符统计,显示的时候有点小处理即可. 提交情况: 感觉POJ的测试数据有点骗人 ...

  5. POJ 2745 显示器 解题报告

    POJ 2745 显示器 解题报告 编号:2745   考查点:模拟 思路:抽象出来,计算器显示是7个笔画,然后建立数组表示各笔画被覆盖情况,不过这个是我看了书之后实现的,方法果真经典. 提交情况:比 ...

  6. Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)

    http://blog.csdn.net/geniusluzh/article/details/6619575 在说Tarjan算法解决桥和边双连通分量问题之前我们先来回顾一下Tarjan算法是如何求 ...

  7. TensorRT Analysis Report分析报告

    TensorRT Analysis Report 一.介绍 TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟.高吞吐率的部署推理.TensorRT可 ...

  8. 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 ...

  9. POJ 1797 Heavy Transportation 解题报告

    分类:图论,生成树,最短路,并查集 作者:ACShiryu 时间:2011-7-28 地址:ACShiryu's Blog Heavy Transportation Time Limit: 3000M ...

最新文章

  1. java处理中文字符_Java中文字符处理的四大迷题
  2. 据我所知,这是第一个完整实现运动分割、动态目标追踪等的「开源」动态SLAM系统!...
  3. 程序员求职面试 HR问的问题都能轻松答出,offer分分钟到手
  4. Tkinter的Menubutton组件
  5. yii2 behavior 排除某个方法_中学科目二 | 教学方法
  6. 深度学习笔记(40) YOLO
  7. Hadoop的I/O操作
  8. 计算机考研问题,考研计算机常见的6个问题
  9. MySQL 字符集支持
  10. git的历史版本拉分支、回撤revert、回退reset
  11. 自定义snippet(代码段)就可以极大的提高你的开发效率 VScode快速一键生成html、vue、jsx、ajax、sass、docker等代码片段
  12. java数据类型的转换函数_JAVA中常用数据类型转换函数
  13. HBase中MVCC的实现机制及应用情况
  14. 指示灯亮着,但是右边的数字小键盘不可用
  15. hdu 5101 n集合选2个不同集合数使和大于k
  16. SIFT算法学习总结
  17. 扩展欧几里得模板+例题
  18. 蔡凯龙:跨界是一种寻求人生宽度的方式
  19. matlab非线性拟合算检验,matlab非线性拟合求参数怎样确定初始值
  20. 蒙德里安森林算法_蒙德里安的格子画教案

热门文章

  1. java利用正则截取字符串中的数字
  2. 管理Win2003sp1防火墙的一点小技巧
  3. 十一、Shell 文件包含
  4. php 数据集转换树、递归重组节点信息多维数组(转)
  5. 笔记--------手动分页
  6. jquery背景自动切换特效
  7. 如何使用itunes的Promo code进行软件购买?
  8. Android Studio 生成 ButterKnife 注入的插件
  9. mac 下启动Android Studio 时出现 Android Studio was unable to find a valid Jvm
  10. 使用Freemarker来页面静态化,与Spring整合使用