2011百度之星初赛B圆环
2012-05-25 11:30
267 查看
这是百度之星2011初赛B中的第一道题,题目也很水,只要找到解题思路就OK了。。
题目:
[align=center]时间限制:1000ms[/align]
[align=left]描述[/align]
[align=left]一个圆环上有n个位置,这n个位置按顺时针依次标号为1, 2, …, n。初始时圆环的每个位置上都有一个1至n之间的整数,且每个整数只出现一次。[/align]
[align=left]任何时刻,你可以将圆环上的数全部逆时针旋转一个位置,即第i个位置上的数变为原来第i + 1个位置上的数,第n个位置上的数变为原来第1个位置上的数。也可以将圆环上的数全部顺时针旋转一个位置,即第i个位置上的数变为原来第i – 1个位置上的数,第1个位置上的数变为原来第n个位置上的数。另有一个装置,可以交换圆环上第a个位置和第b个位置上的数。[/align]
[align=left]下图给出了三种操作的示例,圆环上有6个位置,初始数字分别为1, 2, 4, 3, 5, 6,能交换第2个和第3个位置上的数。经过一次逆时针旋转后变为2, 4, 3, 5, 6, 1,交换后变为2, 3, 4, 5, 6, 1,再经过一次顺时针旋转后变为1, 2, 3, 4, 5, 6。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left][/align]
[align=left]请问通过旋转和交换,能否使得第i个位置上的数正好是i。[/align]
[align=left][/align]
[align=left]输入[/align]
[align=left]输入包含多组数据。[/align]
[align=left]每组数据的第一行包含一个整数n,表示圆环上的数字个数。[/align]
[align=left]第二行包含两个整数a, b(1 ≤ a < b ≤ n),表示可以交换圆环上第a个位置和第b个位置上的数。[/align]
[align=left]接下来n行描述圆环上每个位置的初始值,其中第i行包含一个整数ai,表示初始时刻第i个位置上的数。[/align]
[align=left]最后一组数据之后的一行为一个0,表示输入结束。[/align]
[align=left]输出[/align]
[align=left]对于每个测试用例,输出一行,如果能满足要求,这行中应只包含一个单词Yes,如果不能满足要求,这行中应只包含一个单词No。[/align]
[align=left]样例输入[/align]
[align=left]6[/align]
[align=left]2 3[/align]
[align=left]1[/align]
[align=left]2[/align]
[align=left]4[/align]
[align=left]3[/align]
[align=left]5[/align]
[align=left]6[/align]
[align=left]4[/align]
[align=left]1 3[/align]
[align=left]1[/align]
[align=left]2[/align]
[align=left]4[/align]
[align=left]3[/align]
[align=left]0[/align]
[align=left]样例输出[/align]
[align=left]Yes[/align]
[align=left]No[/align]
[align=left]提示[/align]
[align=left]对于100%的数据,1 ≤ n ≤ 1,000。[/align]
解法思路:
首先我们定义“连通”的概念:如果在圆环中的位置可以互换,则我们认为这两个数是连通的。。。我们可以找到一个连通的一串数,则这串数中任意两个数是可以互换的。(why?自己证明把,很简单!)首先我们对每个数,找到他所属于的连通分支,然后从小到大进行排序。。。最后如果这些数能够组成连续的自然数,我们就认为这个圆环通过旋转和交换,能够使i的位置上的数是i。。
如图:
代码实现起来很容易,其实我也没写,希望有时间的同学可以写下。。。
本文出自 “沧海龙腾” 博客,请务必保留此出处http://canghailongteng.blog.51cto.com/4967747/877986
题目:
[align=center]时间限制:1000ms[/align]
[align=left]描述[/align]
[align=left]一个圆环上有n个位置,这n个位置按顺时针依次标号为1, 2, …, n。初始时圆环的每个位置上都有一个1至n之间的整数,且每个整数只出现一次。[/align]
[align=left]任何时刻,你可以将圆环上的数全部逆时针旋转一个位置,即第i个位置上的数变为原来第i + 1个位置上的数,第n个位置上的数变为原来第1个位置上的数。也可以将圆环上的数全部顺时针旋转一个位置,即第i个位置上的数变为原来第i – 1个位置上的数,第1个位置上的数变为原来第n个位置上的数。另有一个装置,可以交换圆环上第a个位置和第b个位置上的数。[/align]
[align=left]下图给出了三种操作的示例,圆环上有6个位置,初始数字分别为1, 2, 4, 3, 5, 6,能交换第2个和第3个位置上的数。经过一次逆时针旋转后变为2, 4, 3, 5, 6, 1,交换后变为2, 3, 4, 5, 6, 1,再经过一次顺时针旋转后变为1, 2, 3, 4, 5, 6。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left][/align]
[align=left]请问通过旋转和交换,能否使得第i个位置上的数正好是i。[/align]
[align=left][/align]
[align=left]输入[/align]
[align=left]输入包含多组数据。[/align]
[align=left]每组数据的第一行包含一个整数n,表示圆环上的数字个数。[/align]
[align=left]第二行包含两个整数a, b(1 ≤ a < b ≤ n),表示可以交换圆环上第a个位置和第b个位置上的数。[/align]
[align=left]接下来n行描述圆环上每个位置的初始值,其中第i行包含一个整数ai,表示初始时刻第i个位置上的数。[/align]
[align=left]最后一组数据之后的一行为一个0,表示输入结束。[/align]
[align=left]输出[/align]
[align=left]对于每个测试用例,输出一行,如果能满足要求,这行中应只包含一个单词Yes,如果不能满足要求,这行中应只包含一个单词No。[/align]
[align=left]样例输入[/align]
[align=left]6[/align]
[align=left]2 3[/align]
[align=left]1[/align]
[align=left]2[/align]
[align=left]4[/align]
[align=left]3[/align]
[align=left]5[/align]
[align=left]6[/align]
[align=left]4[/align]
[align=left]1 3[/align]
[align=left]1[/align]
[align=left]2[/align]
[align=left]4[/align]
[align=left]3[/align]
[align=left]0[/align]
[align=left]样例输出[/align]
[align=left]Yes[/align]
[align=left]No[/align]
[align=left]提示[/align]
[align=left]对于100%的数据,1 ≤ n ≤ 1,000。[/align]
解法思路:
首先我们定义“连通”的概念:如果在圆环中的位置可以互换,则我们认为这两个数是连通的。。。我们可以找到一个连通的一串数,则这串数中任意两个数是可以互换的。(why?自己证明把,很简单!)首先我们对每个数,找到他所属于的连通分支,然后从小到大进行排序。。。最后如果这些数能够组成连续的自然数,我们就认为这个圆环通过旋转和交换,能够使i的位置上的数是i。。
如图:
代码实现起来很容易,其实我也没写,希望有时间的同学可以写下。。。
本文出自 “沧海龙腾” 博客,请务必保留此出处http://canghailongteng.blog.51cto.com/4967747/877986
相关文章推荐
- [原]图标排列-2011百度之星初赛第一题解答
- 园艺布置-百度之星2011初赛题目求解
- [原] 圆环-2011百度之星初赛题目
- 2011百度之星初赛A图标排列
- 【杭电oj5695】Gym Class ——百度之星初赛
- noip2011提高组初赛(答案+选择题题目+个人分析)
- 2011 蓝桥杯【初赛试题】反转串
- 2015年百度之星初赛(1) --- F 矩形面积
- 【百度之星2014~初赛解题报告】
- 2014百度之星初赛第一轮解题报告:party
- hdu5246 超级赛亚ACMer (百度之星初赛)(模拟)
- 【百度之星初赛】序列变换(二分,贪心)
- 2015年百度之星初赛(1) --- F 矩形面积
- 【百度之星初赛A】路径交 LCA+线段树
- 2017百度之星初赛:A-1006. 度度熊的01世界(DFS)
- 百度之星初赛(A)——T2
- 2017"百度之星"程序设计大赛 - 初赛(A)
- 2017百度之星初赛B场第一题Chess--简单杨辉三角问题
- 2017"百度之星"程序设计大赛 - 初赛(B) 度度熊的交易计划 最小费用最大流求最大费用
- 百度之星初赛(A)--小C的倍数问题----余数定理