POJ1063 Flip and Shift
题目来源:http://poj.org/problem?id=1063
题目大意:
有一种游戏如图所示。一个填满黑白球的转盘,它可以有两种操作,一种是将大转盘顺时针旋转,所有球的位置顺时针挪一位,另一种是转动小转盘,使位于小转盘处的三个小球颠倒位置。游戏的目标是达到下面的图片所示的状态,黑球与白球都处在连续的位置上。


写一个程序判断给出的球序列是否可能通过上述的两种操作达到目标序列。
输出:如可能达到目标,输出一行“YES”, 否则“NO”
Sample Input
2
18 0 0 1 0 1 1 1 1 0 1 0 0 1 0 0 0 0 1
14 1 1 0 0 1 1 1 0 0 1 1 0 1 0
Sample Output
YES
NO
观察和琢磨上面的两种对于球的操作,我们可以发现,其实规则等价于可以把任意三个相邻的三个球位置颠倒。考虑两种情况:
1. 球的总数为偶数,那么奇数位的球永远到不了偶数位上,反之亦然。
2. 球的总数为奇数,那么任意一个球都可以到达其它任意一个位置上,这种情况下总可以达到目标状态。
再考虑球总数为偶数时,实际上可以把操作对球颜色顺序的影响分离为对奇数位上球的影响和对偶数位球的影响。我们想象把所有偶数位的球固定,通过旋转可以调换奇数位上相邻的球,通过不断的调换可以把奇数位上黑球调至相邻位置。同样我们可以把偶数位上的黑球调至连续的位置。接下来还要考虑何种情况下才能使整个大转盘上的球可以达到不存在黑白相间的情况。答案是:奇数位上的黑球个数与偶数位上黑球的个数相差不超过1. 这就是球总数为偶数时能达到目标状态的充要条件。
附上两个版本的代码。(直观版和技巧版)
////////////////////////////////////////////////////////////////
// POJ1063 Flip and Shift
// Memory: 208K Time : 16MS
// Language : C++ Result : Accepted
//////////////////////////////////////////////////////////////// #include <iostream> using namespace std; int even_black, odd_black;
int buf, cnt; int main(void) {
int T;
cin >> T;
for (int case_id = ; case_id <= T; ++case_id) {
cin >> cnt;
even_black = odd_black = ;
for (int i = ; i < cnt; ++i) {
cin >> buf;
if (buf == ) {
if (i % == ) {
++odd_black;
} else {
++even_black;
}
}
}
if (cnt % ) { //总球数为奇
cout << "YES" << endl;
} else if (odd_black - even_black > || odd_black - even_black < -) {
cout << "NO" << endl;
} else {
cout << "YES" << endl;
}
}
return ;
}
////////////////////////////////////////////////////////////////
// POJ1063 Flip and Shift
// Memory: 208K Time : 0MS
// Language : C++ Result : Accepted
//////////////////////////////////////////////////////////////// #include <iostream> using namespace std; int r[];
int buf, cnt; int main(void) {
int T; cin >> T;
for (int case_id = ; case_id <= T; ++case_id) {
cin >> cnt;
r[] = r[] = ;
for (int i = ; i < cnt; ++i) {
cin >> buf;
r[i % ] += buf;
}
cout << (cnt % || r[] - r[] < && r[] - r[] > - ? "YES" : "NO") << endl;
}
return ;
}
POJ1063 Flip and Shift的更多相关文章
- zoj 1028 Flip and Shift(数学)
Flip and Shift Time Limit: 2 Seconds Memory Limit: 65536 KB This puzzle consists of a random se ...
- POJ 1063 Flip and Shift 最详细的解题报告
题目来源:Flip and Shift 题目大意:一个椭圆形的环形容器中有黑色和白色两种盘子,问你是否可以将黑色的盘子连续的放在一起.你可以有以下两种操作: 1.顺时针旋转所有的盘子 2.顺时针旋转3 ...
- POJ 1063 - Flip and Shift
Description This puzzle consists of a random sequence of m black disks and n white disks on an oval- ...
- 1254 Flip and Shift
这题是目的是把黑球和白球分开连续放,事实上只要把其中一种颜色分好在一边就可以,可以绕一个球转即是第n个球可以放在n-2或者n+2上,因为这是个环,所以只需要把黑球或者白球连续放好就可以,当一共有奇数个 ...
- POJ题目排序的Java程序
POJ 排序的思想就是根据选取范围的题目的totalSubmittedNumber和totalAcceptedNumber计算一个avgAcceptRate. 每一道题都有一个value,value ...
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- HOJ题目分类
各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...
- 论文阅读笔记五十五:DenseBox: Unifying Landmark Localization with End to End Object Detection(CVPR2015)
论文原址:https://arxiv.org/abs/1509.04874 github:https://github.com/CaptainEven/DenseBox 摘要 本文先提出了一个问题:如 ...
- 【转】POJ百道水题列表
以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...
随机推荐
- (修改)oracle11g监听多台主机配置,用pl/sql连接操作多个数据库详解
很多朋友在开发项目中并不是每个人用一个数据库,而是有单独的一台主机作为开发的数据库服务器,这样,就需要我们的开发人员去连接它. 首先是进入oracle的 Net Mananger:
- Hadoop YARN: 1/1 local-dirs are bad: /var/lib/hadoop-yarn/cache/yarn/nm-local-dir; 1/1 log-dirs are bad: /var/log/hadoop-yarn/containers hdfs硬盘90% yarn unhealthy
1/1 local-dirs are bad: /var/lib/hadoop-yarn/cache/yarn/nm-local-dir; 1/1 log-dirs are bad: /var/log ...
- 探究QA职能
测试人员一般是被外界普遍认为是QC,即对产品的质量进行检测,找出质量问题并配合相关人员解决问题,从而管控产品质量,说通俗点就是帮开发找漏洞,给开发擦屁股:如果线上出现bug,就是你没有测试完整,最累的 ...
- [Python Study Notes]饼状图绘制
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- 24-Fibonacci(dfs+剪枝)
http://acm.hdu.edu.cn/showproblem.php?pid=5167 Fibonacci Time Limit: 2000/1000 MS (Java/Others) M ...
- 一道java笔试题目:Vector和ArrayList的区别
Vector和ArrayList的区别 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构这些类均在java.util包中本文试图通过 ...
- p4301 [CQOI2013]新Nim游戏
传送门 分析 通过nim游戏我们可以知道我们现在的任务就是通过两轮之后使得剩余的几堆异或和为非0数 所以我们只需要在第一步使得剩余集合的任意非空子集的异或和非0即可 于是我们考虑线性基 我们知道线性基 ...
- python-ASCII与Unicode
# Auther: Aaron Fan'''ASCII:不支持中文,1个英文占1个字节Unicode(万国码,支持所有国家的文字显示):支持中文,但是每个英文和中文都占2个字节UTF-8(是一种针对U ...
- JavaScript-ES6中的class及继承
我们知道,ES6中,引入了class这个关键字,让在JavaScript中定义类更加简单了 在介绍ES6中的class之前,我们先来看一下JavaScript之前类的实现,在此之前,JavaScrip ...
- 使用docker的kms服务器激活office2016专业增强版
我安装了office2016专业增强版,使用自己搭建的kms激活服务器无法激活,回来使用了一下脚本: 感谢,rainfarm的博主.博客地址:http://blog.sina.com.cn/s/blo ...