POJ Problem 3931 Classmates题解
2016-10-25 15:20
316 查看
类似于约瑟夫环问题,输入Mike的编号m和在环中剩余的人数k(包含Mike),求解Mike最少有多少名同学。
#include<iostream>
using namespace std;
typedef long long LL;
LL joseph(LL m, LL k){
if(m == 1) return 2*k-1;
else if(m%2 == 0){
LL n = m/2-1+k;
if(n >= m) return n;
else return 0;
}
else{
LL n1 = joseph((m+1)/2, k)*2;
LL n2 = joseph((m-1)/2, k)*2+1;
if(n2 == 1) n2 = 0;
if(n1 > 0 && n2 > 0)
return min(n1, n2);
else
return max(n1, n2);
}
}
int main(){
LL m, k;
while(cin >> m >> k){
if(m == 0 && k == 0) break;
LL ans = joseph(m, k);
if(ans > 0)
cout << ans << endl;
else
cout << "Impossible" << endl;
}
return 0;
}
#include<iostream>
using namespace std;
typedef long long LL;
LL joseph(LL m, LL k){
if(m == 1) return 2*k-1;
else if(m%2 == 0){
LL n = m/2-1+k;
if(n >= m) return n;
else return 0;
}
else{
LL n1 = joseph((m+1)/2, k)*2;
LL n2 = joseph((m-1)/2, k)*2+1;
if(n2 == 1) n2 = 0;
if(n1 > 0 && n2 > 0)
return min(n1, n2);
else
return max(n1, n2);
}
}
int main(){
LL m, k;
while(cin >> m >> k){
if(m == 0 && k == 0) break;
LL ans = joseph(m, k);
if(ans > 0)
cout << ans << endl;
else
cout << "Impossible" << endl;
}
return 0;
}
相关文章推荐
- 【poj 1260】Pearls 题意&题解&代码(C++)
- BZOJ1853:[SCOI2010]幸运数字 & BZOJ2393:Cirno的完美算数教室——题解
- 【poj 3258】River Hopscotch 题意&题解&代码(C++)
- BZOJ5321 & 洛谷4064 & LOJ2274:[JXOI2017]加法——题解
- [线段树][CODEVS 1080]题解
- 20180803 题解 Winniechen's Tesst
- [LeetCode]题解(python):135-Candy
- 【LeetCode题解】21_合并两个有序链表
- [LeetCode]题解(python):137-Single Number II
- LeetCode题解整理版(二)
- 【poj 2948】Martian Mining 题意&题解&代码(C++)
- APIO2007-2015题解大集合(2007年篇)
- Leetcode题解 169. Majority Element
- Leetcode题解15 58. Length of Last Word
- 【hdu 5510】【2015ACM/ICPC亚洲区沈阳站-重现赛 】Bazinga 题意&题解&代码(C++)
- 2015ACM浙江省省赛部分题解
- LeetCode题解 343.Integer Break
- Leetcode题解14 344. Reverse String
- 【题解】2016.5.8SWJTU校赛题解
- GDCPC2016题解 by lby@SYSU | Asiimov