http://acm.hdu.edu.cn/showproblem.php?pid=5668

这题的话,假设每次报x个,那么可以模拟一遍,

假设第i个出局的是a[i],那么从第i-1个出局的人后,重新报数到他假设经过了p个人,

那么自然x = k(n-i)+p(0<= i < n)

即x = p (mod n-i)

然后显然可以得到n个这样的方程,于是就是中国剩余定理了。

代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <vector>
#include <string>
#define LL long longusing namespace std;int n, s[25];
bool vis[25];
LL rest[25], mmod[25];LL gcd(LL a, LL b)
{LL r;while (b != 0){r = b;b = a%b;a = r;}return a;
}LL lcm(LL a, LL b)
{return a/gcd(a, b)*b;
}//EXGCD
//求解方程ax+by=d,即ax=d mod(b)
//扩展可求逆元
//O(logn)
void exgcd(LL a, LL b, LL &x, LL &y, LL &d)
{if (b == 0){x = 1;y = 0;d = a;}else{exgcd(b, a%b, y, x, d);y -= a/b*x;}
}//中国剩余定理(非互质)
//其中a为除数数组,n为模数数组
LL inv(LL a, LL n)
{LL x, y, d;exgcd(a, n, x, y, d);if (d != 1)return -1;return (x%n + n) % n;
}bool Merge(LL a1, LL n1, LL a2, LL n2, LL &aa, LL &nn)
{LL d = gcd(n1, n2);LL c = a2 - a1;if (c % d)return false;//(n1/d)*k1 = (c/d)(mod(n2/d))c /= d;n1 /= d;n2 /= d;//k1 = (c/d)*(n1/d)^(-1)(mod(n2/d))c *= inv(n1, n2);c %= n2;//k1c *= n1 * d;//a = n1*k1+a1c += a1;nn = n1*n2*d;aa = c;return true;
}LL CRT(int len, LL *a, LL *n)
{LL a1 = a[0], n1 = n[0];LL a2, n2;for (int i = 1; i < len; i++){LL aa, nn;a2 = a[i], n2 = n[i];if (!Merge(a1, n1, a2, n2, aa, nn))return -1;a1 = aa;n1 = nn;}return (a1%n1 + n1) % n1;
}void work()
{LL ans, tmp = 1;memset(vis, false, sizeof(vis));int now = 0, step, t = 0;for (int i = 0; i < n; ++i){step = 0;for (int j = t%n; j < n; j = (j+1)%n){if (vis[j]) continue;step++;if (j == s[now]){now++;vis[j] = true;rest[i] = step%(n-i);mmod[i] = n-i;tmp = lcm(tmp, n-i);t = j;break;}}}ans = CRT(n, rest, mmod);if (ans == -1)printf("Creation August is a SB!\n");else{ans = (ans%tmp+tmp)%tmp;if (ans == 0) ans = tmp;cout << ans << endl;}
}int main()
{//freopen("test.in", "r", stdin);int T, u;scanf("%d", &T);for (int times = 1; times <= T; ++times){scanf("%d", &n);for (int i = 0; i < n; ++i){scanf("%d", &u);s[u-1] = i;}work();}return 0;
}

View Code

转载于:https://www.cnblogs.com/andyqsmart/p/5427879.html

ACM学习历程—HDU5668 Circle(数论)相关推荐

  1. ACM学习历程—HDU5666 Segment(数论)

    http://acm.hdu.edu.cn/showproblem.php?pid=5666 这题的关键是q为质数,不妨设线段上点(x0, y0),则x0+y0=q. 那么直线方程则为y = y0/x ...

  2. 完成了C++作业,本博客现在开始全面记录acm学习历程,真正的acm之路,现在开始

    以下以目前遇到题目开始记录,按发布时间排序 ACM之递推递归 ACM之数学题 拓扑排序 ACM之最短路径做题笔记与记录 STL学习笔记不(定期更新) 八皇后问题解题报告 转载于:https://www ...

  3. ACM学习历程—HDU5586 Sum(动态规划)(BestCoder Round #64 (div.2) 1002)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5586 题目大意就是把一段序列里面的数替换成f(x),然后让总和最大. 首先可以计算出初始的总和,以及每 ...

  4. ACM学习历程—UESTC 1226 Huatuo's Medicine(数学)(2015CCPC L)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1226 题目就是构造一个对称的串,除了中间的那个只有1个,其余的两边都是对称的两个,自然答案就是2*n-1. ...

  5. ACM学习历程—HDU2476 String painter(动态规划)

    http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意是给定一个起始串和一个目标串,然后每次可以将某一段区间染成一种字符,问从起始串到目标串最少需要染多 ...

  6. ACM学习历程—HDU2068 RPG的错排(组合数学)

    Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿 ...

  7. ACM学习历程—Hihocoder [Offer收割]编程练习赛1

    比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...

  8. ACM学习历程—Hihocoder 1290 Demo Day(动态规划)

    http://hihocoder.com/problemset/problem/1290 这题是这次微软笔试的第三题,过的人比第一题少一点,这题一眼看过去就是动态规划,不过转移方程貌似不是很简单,调试 ...

  9. ACM学习历程—51NOD 1685 第K大区间2(二分 树状数组 中位数)

    http://www.51nod.com/contest/problem.html#!problemId=1685 这是这次BSG白山极客挑战赛的E题. 这题可以二分答案t. 关键在于,对于一个t,如 ...

最新文章

  1. 在IIS上搭建WebSocket服务器(一)
  2. MDaemon使用技巧大全--新建账户欢迎文件的设置
  3. hdu1261 JAVA
  4. php企业号自定义菜单,用php实现微信企业号自定义菜单遇到问题,请大神指点!...
  5. LeetCode 67. 二进制求和
  6. Silverlight 2中多语言支持实现(下)
  7. 【图像处理】双边滤波算法(bilateral filter)和导向滤波算法(guided filter)
  8. php 时分秒转时分_php 时分秒转为秒,秒转化为天时分秒
  9. DPDK DPVS 笔记 -> 基本框架整理
  10. 【转载】Pandas速查手册中文版
  11. 论JAVA语言的优缺点
  12. 初高级分析师的能力和工具体系,指标雷达图!
  13. 常见文件扩展名和它们的说明(转)
  14. JAVA HTML 转 PDF
  15. php+mysql实现简易博客系统
  16. Ubuntu20.04微信安装 简单 使用方便
  17. js 浏览器窗口活跃监听
  18. 【好书推荐】芯片产业科普书籍:《芯事》
  19. linux文件权限 705,Linux 文件权限 - osc_86eb7mly的个人空间 - OSCHINA - 中文开源技术交流社区...
  20. 软件测试面试题: B/S、C/S、OA 什么意思?

热门文章

  1. 【matlab】三维曲面(矩形网格---meshgrid)
  2. layui table勾选框的修改_layui表格(Table)下添加可更新拉选择框select
  3. Python爬虫编程实践 Task03
  4. 面试常问的深度学习(DNN、CNN、RNN)的相关问题
  5. feign post 传递空值_别再问 GET 和 POST 有什么不同了
  6. 计算机组成原理实用教程第3版课后答案,计算机组成原理实用教程课后习题答案.docx...
  7. 使用计算机解决问题的本质,(新教材)教科版高中信息技术必修一 2.1 计算机解决问题的过程 课件(共25张PPT)...
  8. java8编程开发入门 李兴华_李兴华系列--JAVA详解视频(jdk1.8)及项目实战教程
  9. 光子浏览器_光子学公开课第十四期 明日开课 | 上海大学金翊教授:三值光学计算机...
  10. Oracle常规恢复的实验测试