POJ 2244 Eeny Meeny Moo
2016-05-05 20:42
423 查看
题目链接:http://poj.org/problem?id=2244
题意:有n个点构成的环,一开始1号出去,然后隔m个出去一个,现在要求最后一个留下的是2号,求最小的m。
思路:可以看做n-1个点,2号点为起点的约瑟夫环问题。枚举m,用公式算最后的编号,直到满足条件即可。
题意:有n个点构成的环,一开始1号出去,然后隔m个出去一个,现在要求最后一个留下的是2号,求最小的m。
思路:可以看做n-1个点,2号点为起点的约瑟夫环问题。枚举m,用公式算最后的编号,直到满足条件即可。
#include <cstdio> #include <cmath> #include <cstring> #include <string> #include <cstdlib> #include <iostream> #include <algorithm> #include <stack> #include <map> #include <set> #include <vector> #include <sstream> #include <queue> #include <utility> using namespace std; #define rep(i,j,k) for (int i=j;i<=k;i++) #define Rrep(i,j,k) for (int i=j;i>=k;i--) #define Clean(x,y) memset(x,y,sizeof(x)) #define LL long long #define ULL unsigned long long #define inf 0x7fffffff #define mod %100000007 int n; int ans[200]; int getans( int n , int k ) { int pos = 0; rep(i,2,n) pos = ( pos + k ) % i; return pos + 1; } int main() { Clean(ans,-1); while( scanf("%d",&n) == 1 ) { if ( !n ) break; n--; if ( ans != -1 ) { printf("%d\n",ans ); break; } for(int i = 2;;i++) if ( getans(n,i) == 1 ) { ans = i; printf("%d\n",ans ); break; } } return 0; }
相关文章推荐
- 多线程实现的方式3:(开启不同的线程,分别进行求和)
- 网络仿真工具TOTEM之——mpls构建LSP
- HDOJ(HDU) 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你
- android 自学日记(六) ——SAX解析中换行问题解决
- HDOJ(HDU) 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你
- 对称的二叉树
- StringUtil
- 自动化运维工具Ansible详细部署
- 船
- 手动制作hadoop-eclipse-plugin插件
- 异常
- Android Studio Gradle编译报input jar file is specified twice
- C++中引用类型
- Buy Low Buy Lower
- 蓝桥杯 PREV-6-翻硬币
- Ubuntu下vi输入i不进入insert插入模式
- ArrayList
- 设计模式中类的关系
- 二进制中1的个数----位运算
- String、StringBuffer与StringBuilder之间区别