codeforces 556B. Case of Fake Numbers 解题报告
题目链接:http://codeforces.com/problemset/problem/556/B
题目意思:给出 n 个齿轮,每个齿轮有 n 个 teeth,逆时针排列,编号为0 ~ n-1。每按一次 button,每个齿轮都会有且仅有一个活动的tooth,对于偶数编号的齿轮,它下一个活动tooth是紧挨着当前tooth的逆时针方向的那个;而奇数编号的齿轮,下一个活动tooth是顺时针的那个。给出每个齿轮的活动tooth,问通过按下有限次的button,问能不能得到一个0,1,...,n-2,n-1的序列。
离校第一场!果然惨不堪言~~~~
犯了些低级错误,输入输出问题= =;然后问题复杂化了,复杂化就算了,连算法都错了。输入的时候用了int,然后转为char保存,以便strcmp比较。。。然后计算新的tooth的时候又转回int。。。。这样做的错误就是输入从int变为char,而算出新的tooth的位置时会比较不了。
例如有这样的序列:
15
2 14 4 1 6 3 8 5 10 7 12 9 14 11 1

ref:0 ~ n-1 的 char
s: 输入的原始序列转化为 char
然后计算新位置的时候,
奇数齿轮计算公式:x = (x-1+n) % n;
偶数齿轮计算公式:x = (x+1+n) % n
问题就出在x上,留意ref的10, 11,之后的位置,不是对应的阿拉伯数字来的,是字符,而公式是针对数字来计算新的tooth位置的。这就会导致(列举10次)以下的情况:

可想而知就是 呵呵呵 了。。。。= =
最后我就踏踏实实用 int 数组来做了,血与泪的教训!一步一步模拟,不要想太多。
这里讲一下循环结束条件,只需要试验1000次就可以了,因为对于每一只齿轮,活动tooth是周而复始的,试验1000次就能把一个齿轮的每个tooth都试遍,其实所有齿轮也就是1000种序列情况嘛~~~同步的哟。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std; const int maxn = + ;
int a[maxn]; int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif // ONLINE_JUDGE int n;
while (scanf("%d", &n) != EOF) { for (int i = ; i < n; i++) {
cin >> a[i];
}
bool flag = true;
int cnt = ;
while (cnt < maxn) {
flag = true;
cnt++;
for (int i = ; i < n; i++) {
if (a[i] != i) {
flag = false;
break;
}
}
if (flag) {
break;
} else {
for (int i = ; i < n; i++) {
if (i & ) {
a[i] = (a[i] - + n) % n;
}
else {
a[i] = (a[i] + ) % n;
}
}
}
}
printf("%s\n", flag ? "Yes" : "No");
}
return ;
}
codeforces 556B. Case of Fake Numbers 解题报告的更多相关文章
- CodeForces - 556B Case of Fake Numbers
//////////////////////////////////////////////////////////////////////////////////////////////////// ...
- CodeForces 556 --Case of Fake Numbers
B. Case of Fake Numbers time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- Codeforces Round #310 (Div. 2) B. Case of Fake Numbers 水题
B. Case of Fake Numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...
- 构造 Codeforces Round #310 (Div. 2) B. Case of Fake Numbers
题目传送门 /* 题意:n个数字转盘,刚开始每个转盘指向一个数字(0~n-1,逆时针排序),然后每一次转动,奇数的+1,偶数的-1,问多少次使第i个数字转盘指向i-1 构造:先求出使第1个指向0要多少 ...
- B. Case of Fake Numbers( Codeforces Round #310 (Div. 2) 简单题)
B. Case of Fake Numbers time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- 【九度OJ】题目1442:A sequence of numbers 解题报告
[九度OJ]题目1442:A sequence of numbers 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1442 ...
- 【LeetCode】129. Sum Root to Leaf Numbers 解题报告(Python)
[LeetCode]129. Sum Root to Leaf Numbers 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/pr ...
- 【LeetCode】386. Lexicographical Numbers 解题报告(Python)
[LeetCode]386. Lexicographical Numbers 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博 ...
- 【LeetCode】165. Compare Version Numbers 解题报告(Python)
[LeetCode]165. Compare Version Numbers 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博 ...
随机推荐
- Linux下的特殊权限SetUID
1.SetUID的功能 只有可以执行的二进制程序才能设置SUID权限 命令执行者要对改程序拥有x执行权限 命令执行者在执行改程序的时候获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属性) ...
- Memcached目录
Memcached 简介.安装和基本使用 Memcached基础知识 理解Memcached的分布式 Memcached存储命令 - set Memcached存储命令 - add Memcached ...
- highcharts图表中级入门之xAxis label:X(横)坐标刻度值过长截断多行(换行)显示问题说明
在使用highcharts图表的过程中,总会碰到这样一个很是棘手的问题,横坐标刻度值太长,在不换行显示的情况下显得格外拥挤.虽然针对这一问题是可以对其刻度值进行旋转以此来避开显示拥挤问题[如何让hig ...
- [译]git checkout
git checkout git checkout提供3种不同的功能: checking out文件, checking out commits, checking out branch. check ...
- [转载]onkeydown、onkeypress、onkeyup、onblur、o
转载链接: http://blog.sina.com.cn/s/blog_697b2dc101014ktb.html onkeydown:按下任何键(字母.数字.系统.tab等)都能触发,且对于字母不 ...
- Android高仿微信(一)——如何消除启动时的白屏
默认情况下,APP启动时会先把屏幕刷成白色,然后才绘制第一个Activity中的View,这两个步骤之间的延迟会造成启动后先看到白屏(时间大概为1秒左右).时间不长,但是我们也看到,一般的APP时不存 ...
- shell简单使用
最近需要用到shell脚本实现关机保护作用,总结下语法 要点: 1.linux下编写的shell脚本不能在window下编写,否则会出现^M的错误,用window编写保存,在linux用vim打开,每 ...
- BZOJ3224——Tyvj 1728 普通平衡树
1.题目大意:数据结构题,是treap,全都是treap比较基本的操作 2.分析:没啥思考的 #include <cstdio> #include <cstdlib> #inc ...
- BZOJ2631——tree
1.题目大意:bzoj1798的lct版本 2.分析:这个把线段树改成splay就好 #include <stack> #include <cstdio> #include & ...
- cocos2d事件处理机制之我见
cocos2d是使用pyglet事件框架来处理事件的. 其中,包括分发器(发射器)和监听器两部分.下面形象的来打个比方. 这个机制就好比一把枪,三步:扣扳机(触发),上弹(注册),给子弹上***(这个 ...