C++ HOJ 约瑟夫问题 之 神牛代码
来源:互联网 发布:java 捕获异常 编辑:程序博客网 时间:2024/06/08 19:18
#include <cstdio> #include <vector> #include <algorithm> using namespace std; const int MAXN = 1 << 17; struct SegTree { int n, m; int a[MAXN + MAXN]; static int L(int i) { return i << 1; } static int R(int i) { return L(i) ^ 1; } void init(int m) { this->m = m; n = 1; while (n < m) { n <<= 1; } fill(a + n, a + n + m, 1); fill(a + n + m, a + n + n, 0); for (int i = n - 1; i > 0; --i) { a[i] = a[L(i)] + a[R(i)]; } } void reset(int i) { i += n; while (i > 0) { --a[i]; i >>= 1; } } int find(int p, int pl, int pr, int l, int r, int& k) { if (pl == l && pr == r) { if (a[p] <= k) { k -= a[p]; return -1; } else if (pr - pl == 1) { return pl; } } int pm = (pl + pr) / 2; if (r <= pm) { return find(L(p), pl, pm, l, r, k); } else if (pm <= l) { return find(R(p), pm, pr, l, r, k); } else { int ret = find(L(p), pl, pm, l, pm, k); if (ret == -1) { ret = find(R(p), pm, pr, pm, r, k); } return ret; } } int find(int i, int k) { k %= a[1]; i = find(1, 0, n, i, m, k); if (i == -1) { i = find(1, 0, n, 0, m, k); } return i; } } st; int main() { int n, q, x, a, b, m; vector<pair<int, int> > v; while (scanf("%d%d%d%d%d%d", &n, &q, &x, &a, &b, &m) != EOF) { // fprintf(stderr, "%d %d %d %d %d %d\n", n, q, x, a, b, m); v.resize(q); for (int i = 0; i < q; ++i) { scanf("%d", &v[i].first); v[i].second = i; } sort(v.begin(), v.end()); st.init(n); for (int i = 0, j = 0, k = 0; i < q; ++i) { while (j < v[i].first) { ++j; k = st.find(k, x); st.reset(k); x = (1LL * x * a + b) % m; } v[i].first = k; swap(v[i].first, v[i].second); } sort(v.begin(), v.end()); for (int i = 0; i < q; ++i) { if (i > 0) { putchar(' '); } printf("%d", v[i].second + 1); } puts(""); } return 0; }
【约瑟夫改进问题】
1.HDOJ 1443 约瑟夫环的最新应用
http://blog.csdn.net/hackbuteer1/article/details/6657938
2.课程设计---约瑟夫环
http://blog.csdn.net/u012377333/article/details/46343303
3.POJ1012——再解一遍艰难的约瑟夫
http://bbs.csdn.net/topics/380056863
4.xt 1149 线段树版的约瑟夫
http://blog.csdn.net/cscj2010/article/details/7586016
5.全排列算法及实现
http://blog.csdn.net/hackbuteer1/article/details/6657435
0 0
- C++ HOJ 约瑟夫问题 之 神牛代码
- HOJ 1017 模拟约瑟夫问题
- 约瑟夫问题 C语言代码
- c之约瑟夫环问题
- HOJ 1016 Joseph's problem I 约瑟夫环问题
- “约瑟夫问题”实现代码
- 约瑟夫问题Java代码
- 约瑟夫问题的代码
- 约瑟夫问题 java代码
- 约瑟夫环 HOJ 1016
- 约瑟夫问题求解(C++)
- 约瑟夫问题(c++)
- 《程序员面试代码指南》之约瑟夫环问题
- 数据结构之约瑟夫问题
- 算法之约瑟夫问题
- C/C++之单链表(含约瑟夫问题)经典总结
- c语言数据结构之单向循环链表约瑟夫问题
- 约瑟夫问题的代码实现
- 关于block使用需要注意的地方
- 步步为营(三)贪心(2)选择不相交区间
- MAC搜索不到蓝牙设备解决方案
- SSH框架中经典错误:java.lang.NoSuchMethodError: antlr.collections.AST.getLine()解决方案
- 豆瓣API在python中的使用
- C++ HOJ 约瑟夫问题 之 神牛代码
- hibernate学习笔记(二)
- js 获取json对象的Key、value
- 【sqlserver】阻止更新要求重建表的解决办法
- json字符串转为字典
- java定时器Timer,TimerTask每隔一段时间随机生成数字
- UVA10361转化思想使代码更加简洁
- POJ 1486 (2分匹配 必须变判断)
- 【memcache/redis】memcache常见问题汇总