IEEEXtreme 10.0 - Flower Games
这是 meelo 原创的 IEEEXtreme极限编程比赛题解
题目来源 第10届IEEE极限编程大赛
https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/flower-games
Joy and her friends found a flower with N petals and want to play a modified version of the He loves me... he loves me not game. The girls number the petals with numbers from 1 to N in the clockwise direction. They will traverse the petals in circular order starting with 1, then 2, ..., then N, then 1... At the first petal, they will shout "He loves me", at the second "He loves me not" and tear it, at the third "He loves me", at the fourth "He loves me not" and tear it. The girls will continue the game until there is only one petal left. The task is to identify the number of the last petal.
Input Format
The input begins with an integer T, giving the number of test cases in the input.
Each testcase consists of an integer N, on a line by itself.
Constraints
1 <= T <= 100000
1 <= N < 2^63
Output Format
The location of the last petal, on a line by itself.
Sample Input
4
2
3
4
6
Sample Output
1
3
1
5
Explanation
There are four test cases in the input.
With 2 petals, one would skip 1, tear 2, and then only 1 is left.
With 3 petals, one would skip 1, tear 2, skip 3, tear 1, and then only 3 is left.
With 4 petals, one would skip 1, tear 2, skip 3, tear 4, skip 1, tear 3, and then only 1 is left.
With 6 petals, one would skip 1, tear 2, skip 3, tear 4, skip 5, tear 6, skip 1, tear 3, skip 5, tear 1, and then only 5 is left.
题目解析
这题是约瑟夫环问题。由于N的大小是2^63,肯定不能使用模拟的方法。
在这个问题里跳跃的距离总是1,是一种最为特殊的情况,我们不妨来找找规律。
2片花瓣,留下的是1号
3片花瓣,留下的是3号
4片花瓣,留下的是1号
5片花瓣,留下的是3号
6片花瓣,留下的是5号
7片花瓣,留下的是7号
8片花瓣,留下的是1号
9片花瓣,留下的是3号
10片花瓣,留下的是5号
很有规律是吧,结果总是个奇数。表示成二进制数,去掉最后1为就是:0,1,0,1,2,3,0,1,2,3,4,5,6,7。如果再在二进制数的第一位补上1,就变成了2,3,4,5,6,7,8,9,10,11,12,13,14,15。
问题就解决了。
其实这个问题可以给出证明。
由于2片花瓣,留下的是1号。
那么3片花瓣,去掉1瓣后,就变成了一个2片花瓣的问题,我们知道这个新问题留下的是1号。那么这个新问题的1号是原来的多少号呢,2x1+1=3号。
那么4片花瓣,去掉2瓣后,就变成了一个2片花瓣的问题,我们知道这个新问题留下的是1号。那么这个新问题的1号是原来的多少号呢,(2x2+1)%4=1号。
那么5片花瓣,去掉1瓣后,就变成了一个4片花瓣的问题,我们知道这个新问题留下的是1号。那么这个新问题的1号是原来的多少号呢,2x1+1=3号。
有2个幂片花瓣,最终留下的就是1号。
问题一般化后,N=(b1b2b3...bn)二进制,去掉(b2b3...bn)2后,就变成了一个(b100...0)片花瓣的问题,我们知道这个新问题留下的是1号。那么这个新问题的1号是原来的多少号呢,2x(b2b3...bn)2+1号。
程序
Java
- import java.io.*;
- import java.util.*;
- public class Solution {
- public static void main(String[] args) {
- Scanner scan = new Scanner(System.in);
- int N = scan.nextInt();
- for(int n = 0; n < N; n++) {
- long input = scan.nextLong();
- long highest = Long.highestOneBit(input);
- long output = ((input & ~highest) << 1) + 1;
- System.out.println(output);
- }
- }
- }
博客中的文章均为 meelo 原创,请务必以链接形式注明 本文地址
IEEEXtreme 10.0 - Flower Games的更多相关文章
- IEEEXtreme 10.0 - Game of Stones
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Game of Stones 题目来源 第10届IEEE极限编程大赛 https://www.hackerr ...
- IEEEXtreme 10.0 - Inti Sets
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Inti Sets 题目来源 第10届IEEE极限编程大赛 https://www.hackerrank.c ...
- IEEEXtreme 10.0 - Painter's Dilemma
这是 meelo 原创的 IEEEXtreme极限编程比赛题解 Xtreme 10.0 - Painter's Dilemma 题目来源 第10届IEEE极限编程大赛 https://www.hack ...
- IEEEXtreme 10.0 - Ellipse Art
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Ellipse Art 题目来源 第10届IEEE极限编程大赛 https://www.hackerrank ...
- IEEEXtreme 10.0 - Counting Molecules
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Counting Molecules 题目来源 第10届IEEE极限编程大赛 https://www.hac ...
- IEEEXtreme 10.0 - Checkers Challenge
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Checkers Challenge 题目来源 第10届IEEE极限编程大赛 https://www.hac ...
- IEEEXtreme 10.0 - Playing 20 Questions with an Unreliable Friend
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Playing 20 Questions with an Unreliable Friend 题目来源 第1 ...
- IEEEXtreme 10.0 - Full Adder
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Full Adder 题目来源 第10届IEEE极限编程大赛 https://www.hackerrank. ...
- IEEEXtreme 10.0 - N-Palindromes
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - N-Palindromes 题目来源 第10届IEEE极限编程大赛 https://www.hackerra ...
随机推荐
- 使用Java解析XML文件或XML字符串的例子
转: 使用Java解析XML文件或XML字符串的例子 2017年09月16日 11:36:18 inter_peng 阅读数:4561 标签: JavaXML-Parserdom4j 更多 个人分类: ...
- Windows互斥锁demo和分析
一:windows创建锁接口 创建互斥锁的方法是调用函数CreateMutex HANDLE CreateMutex( LPSECURITY_ATTRIBUTESlpMutexAttributes, ...
- epoll的一些细节和注意事项
epoll_event结构 struct epoll_event { uint32_t events; /* Epoll events */ epoll_data_t data; /* User da ...
- STL源码分析-string
http://note.youdao.com/noteshare?id=c9b53b7d3379939aae7c05d1ea141a42
- hihoCoder #1582 : Territorial Dispute 凸包
#1582 : Territorial Dispute 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In 2333, the C++ Empire and the Ja ...
- discuz更换域名,登录不了解决
准备工作 :因为域名更换了,因此原域名就不能再进后台了,请申请好新域名,并正确备案,让机房添加白名单,重新解析,重新绑定空间..... 完成一系列工作后,进入DZ程序修改. ------------- ...
- [DeeplearningAI笔记]卷积神经网络3.1-3.5目标定位/特征点检测/目标检测/滑动窗口的卷积神经网络实现/YOLO算法
4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.1目标定位 对象定位localization和目标检测detection 判断图像中的对象是不是汽车--Image clas ...
- ios 字符串截取
NSString *str = @"my name is jiemu"; 1.从第三个字符开始,截取长度为4的字符串 NSString *str2 = [str substring ...
- == 和 equals,equals 与 hashcode,HashSet 和 HashMap,HashMap 和 Hashtable
一:== 和 equals == 比较引用的地址equals 比较引用的内容 (Object 类本身除外) String obj1 = new String("xyz"); Str ...
- Debian9(8)下python3和python2同时安装如何使用pip
在bash下Python会调用python2.x python3会调用python3.x 如果使用pip install命令安装模块会安装python2的模块. 而python3的pip命令使用的是p ...