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 ...
随机推荐
- 问题:oracle LISTAGG 连接字符串;结果:Oracle 连接字符串的方法
Oracle 连接字符串的方法 方法一:wmsys.wm_concat(column) 介绍:其函数在Oracle 10g推出,在10g版本中,返回字符串类型,在11g版本中返回clob类型.括号里面 ...
- spring各版本下载地址
发现从spring.io里面找下载连接不好找了,但是机智的我还是找到了,这里做下分享 一.纯spring http://repo.spring.io/release/org/springframewo ...
- C++之deque
deque(包含头文件#include<deque>)由若干段连续空间串接而成,一旦有必要在deque的头部或尾端增加新的空间,便配置一段定量连续的空间,串接在deque的头部或尾端.de ...
- 【转】nginx禁止访问某个文件和目录(文件夹)
nginx禁止访问所有.开头的隐藏文件设置 location ~* /.* {deny all;} nginx禁止访问目录, 例如:禁止访问path目录 location ^~ /path {deny ...
- 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-001选择排序法(Selection sort)
一.介绍 1.算法的时间和空间间复杂度 2.特点 Running time is insensitive to input. The process of finding the smallest i ...
- 数字图像处理实验(4):PROJECT 02-04 [Multiple Uses],Zooming and Shrinking Images by Bilinear Interpolation 标签: 图像处理MATLAB
实验要求: Zooming and Shrinking Images by Bilinear Interpolation Objective To manipulate another techniq ...
- spoj2142 Arranging Flowers
传送门 题目大意 给你n和m,表示一个n*n的数独已经填完了m行,让你填出剩下几行,要求答案的字典序最小. 分析 看到这道题我首先想到的是记录每行每列使用了哪些数字,然后贪心的来填,但是发现用这种策略 ...
- Website开发前页面设计 Mockup的一些工具
这里介绍的Website开发前,页面设计的一些工具 1. Balsamiq (我们公司用的) https://balsamiq.com/download/ 2. Figma https://ww ...
- Batch Normalization参考博客
https://blog.csdn.net/whitesilence/article/details/75667002 https://blog.csdn.net/malefactor/article ...
- java全栈day01-02入门案例
一 在开始案例之前,我们需要了解一下Java应用程序的编写流程. 通过上图我们可以了解到编写的程序大致如下: 1 源文件:编写Java源文件(我们也称之为源代码文件),它的扩展名为.java: 2 ...