http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4140

约瑟夫问题。。。。

考虑0~n-1编号出第m个

即((m%n)-1+n)%n

形象地说就是

0, 1, ..., m-1, m, m+1, ..., n-1

即出列m-1

那么我们出列m-1后,还有

0, 1, ..., m-2, m, m+1, ..., n-1

序列全都减去m,重新标号为

-m, -m+1, ... -2, 0, 1, ..., n-m-1

(+n)%n后且0开头可得

0, 1, 2, ..., n-2

那么变成子问题,设这个子问题的解为f(x),那么f(x)=(f(x-1)+m)%x,即我们在x-1这个序列找到了标号,然后转换为x的标号(即全部加上m)

因为从1标号,所以答案加上1

假设先删除w,那么序列等于w标号为0逆时针旋转了n-w个单位(只旋转一次)

所以我们在计算完f(n-1)后,加上w加上1然后再转换

#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
using namespace std;
typedef long long ll;
#define pii pair<int, int>
#define mkpii make_pair<int, int>
#define pdi pair<double, int>
#define mkpdi make_pair<double, int>
#define pli pair<ll, int>
#define mkpli make_pair<ll, int>
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << (#x) << " = " << (x) << endl
#define error(x) (!(x)?puts("error"):0)
#define printarr2(a, b, c) for1(_, 1, b) { for1(__, 1, c) cout << a[_][__]; cout << endl; }
#define printarr1(a, b) for1(_, 1, b) cout << a[_] << '\t'; cout << endl
inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; } int main() {
int n, k, m;
read(n); read(k); read(m);
while(n+k+m) {
int f=0;
for1(i, 2, n-1) f=(f+k)%i;
int ans=f+m+1;
ans%=n;
while(ans<=0) ans+=n;
printf("%d\n", ans);
read(n); read(k); read(m);
}
return 0;
}

  

最新文章

  1. KMP算法求解
  2. 将对象序列化,反序列化到XML
  3. JIRA简介
  4. iOS开发--关于TableViewCell的可视化设置细节
  5. 关于IOS显示图片的一些注意事项
  6. C#进程操作
  7. 20145211 《Java程序设计》第1周学习总结——小荷才露尖尖角
  8. C++与正态分布
  9. C++:运算符重载函数之&quot;++&quot;、&quot;--&quot;、&quot;[ ]&quot;、&quot;==&quot;的应用
  10. Unicode和字符集小结
  11. JS为Select下拉框添加输入功能
  12. ora-28056 (Writing audit records to Windows Event Log failed)
  13. android 边学边记 2015.10.16
  14. ORM的实现
  15. Mybatis框架的简单运用
  16. 第49章 令牌端点(Token Endpoint) - Identity Server 4 中文文档(v1.0.0)
  17. 在Java路上,我看过的一些书、源码和框架(转)
  18. Netty 源码 Channel(二)核心类
  19. 根据时间获取最新数据 SQL(每一个人或者每一项)
  20. python 可视化 散点图。柱状图、等高线

热门文章

  1. DAS存储未死,再次欲获重生
  2. 苹果开发——设置iTunes Connect中的Contracts, Tax, and Banking
  3. Java同步机制总结--synchronized
  4. java 清单文件
  5. openvpn mac客户端tunnelblick连接后自动添加路由
  6. 查看Linux磁盘空间大小命令
  7. 详解C#泛型(二) 获取C#中方法的执行时间及其代码注入 详解C#泛型(一) 详解C#委托和事件(二) 详解C#特性和反射(四) 记一次.net core调用SOAP接口遇到的问题 C# WebRequest.Create 锚点“#”字符问题 根据内容来产生一个二维码
  8. EMQ 压测问题
  9. winform通过网络获取用户信息
  10. static 与单例模式、auto_ptr与单例模式、const 用法小结、mutable修饰符