ACM学习历程—HDU5668 Circle(数论)
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(数论)相关推荐
- ACM学习历程—HDU5666 Segment(数论)
http://acm.hdu.edu.cn/showproblem.php?pid=5666 这题的关键是q为质数,不妨设线段上点(x0, y0),则x0+y0=q. 那么直线方程则为y = y0/x ...
- 完成了C++作业,本博客现在开始全面记录acm学习历程,真正的acm之路,现在开始
以下以目前遇到题目开始记录,按发布时间排序 ACM之递推递归 ACM之数学题 拓扑排序 ACM之最短路径做题笔记与记录 STL学习笔记不(定期更新) 八皇后问题解题报告 转载于:https://www ...
- ACM学习历程—HDU5586 Sum(动态规划)(BestCoder Round #64 (div.2) 1002)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5586 题目大意就是把一段序列里面的数替换成f(x),然后让总和最大. 首先可以计算出初始的总和,以及每 ...
- ACM学习历程—UESTC 1226 Huatuo's Medicine(数学)(2015CCPC L)
题目链接:http://acm.uestc.edu.cn/#/problem/show/1226 题目就是构造一个对称的串,除了中间的那个只有1个,其余的两边都是对称的两个,自然答案就是2*n-1. ...
- ACM学习历程—HDU2476 String painter(动态规划)
http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意是给定一个起始串和一个目标串,然后每次可以将某一段区间染成一种字符,问从起始串到目标串最少需要染多 ...
- ACM学习历程—HDU2068 RPG的错排(组合数学)
Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿 ...
- ACM学习历程—Hihocoder [Offer收割]编程练习赛1
比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...
- ACM学习历程—Hihocoder 1290 Demo Day(动态规划)
http://hihocoder.com/problemset/problem/1290 这题是这次微软笔试的第三题,过的人比第一题少一点,这题一眼看过去就是动态规划,不过转移方程貌似不是很简单,调试 ...
- ACM学习历程—51NOD 1685 第K大区间2(二分 树状数组 中位数)
http://www.51nod.com/contest/problem.html#!problemId=1685 这是这次BSG白山极客挑战赛的E题. 这题可以二分答案t. 关键在于,对于一个t,如 ...
最新文章
- 在IIS上搭建WebSocket服务器(一)
- MDaemon使用技巧大全--新建账户欢迎文件的设置
- hdu1261 JAVA
- php企业号自定义菜单,用php实现微信企业号自定义菜单遇到问题,请大神指点!...
- LeetCode 67. 二进制求和
- Silverlight 2中多语言支持实现(下)
- 【图像处理】双边滤波算法(bilateral filter)和导向滤波算法(guided filter)
- php 时分秒转时分_php 时分秒转为秒,秒转化为天时分秒
- DPDK DPVS 笔记 -> 基本框架整理
- 【转载】Pandas速查手册中文版
- 论JAVA语言的优缺点
- 初高级分析师的能力和工具体系,指标雷达图!
- 常见文件扩展名和它们的说明(转)
- JAVA HTML 转 PDF
- php+mysql实现简易博客系统
- Ubuntu20.04微信安装 简单 使用方便
- js 浏览器窗口活跃监听
- 【好书推荐】芯片产业科普书籍:《芯事》
- linux文件权限 705,Linux 文件权限 - osc_86eb7mly的个人空间 - OSCHINA - 中文开源技术交流社区...
- 软件测试面试题: B/S、C/S、OA 什么意思?
热门文章
- 【matlab】三维曲面(矩形网格---meshgrid)
- layui table勾选框的修改_layui表格(Table)下添加可更新拉选择框select
- Python爬虫编程实践 Task03
- 面试常问的深度学习(DNN、CNN、RNN)的相关问题
- feign post 传递空值_别再问 GET 和 POST 有什么不同了
- 计算机组成原理实用教程第3版课后答案,计算机组成原理实用教程课后习题答案.docx...
- 使用计算机解决问题的本质,(新教材)教科版高中信息技术必修一 2.1 计算机解决问题的过程 课件(共25张PPT)...
- java8编程开发入门 李兴华_李兴华系列--JAVA详解视频(jdk1.8)及项目实战教程
- 光子浏览器_光子学公开课第十四期 明日开课 | 上海大学金翊教授:三值光学计算机...
- Oracle常规恢复的实验测试