HDU 5668 Circle (约瑟夫游戏,求解同余方程组)
来源:互联网 发布:照片摇奖软件 编辑:程序博客网 时间:2024/05/27 19:25
样例:
1
7
7 6 5 4 3 2 1
题解:约瑟夫环问题,可以转换成中国剩余定理,然后就是套模板了。好坑啊,我每轮游戏都从第一个人开始计数。。而且题意也理解错了。。输入是代表第一个人第七轮游戏才出局,而不是第七个人第一轮游戏出局。。。
#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <cstdlib>#include <algorithm>#include <cmath>#include <vector>#include <set>#include <list>#include <queue>#include <map>#include <stack>using namespace std;#define L(i) i<<1#define R(i) i<<1|1#define INF 0x3f3f3f3f#define pi acos(-1.0)#define eps 1e-9#define maxn 100010#define MOD 1000000007int num[22],m[22],a[22],c[22];long long extend_gcd(long long a,long long b,long long &x,long long &y){ if(a == 0 && b == 0) return -1; if(!b) { x = 1; y = 0; return a; } long long d = extend_gcd(b,a%b,y,x); y -= a/b*x; return d;}bool solve(int &m0,int &a0,int m,int a){ long long y,x; int g = extend_gcd(m0,m,x,y); if(abs(a-a0)%g) return 0; x *= (a - a0) / g; x %= m/g; a0 = (x*m0 + a0); m0 *= m/g; a0 %= m0; if(a0 < 0) a0 += m0; return 1;}bool MLSE(int &m0,int &a0,int n){ bool flag = 1; m0 = 1; a0 = 0; for(int i = 0; i < n; i++) if(!solve(m0,a0,m[i],a[i])) { flag = 0; break; } return flag;}int main(){int t;scanf("%d",&t);while(t--){int n,flag[22];memset(flag,1,sizeof(flag));scanf("%d",&n);for(int i = 0; i < n; i++) scanf("%d",&c[i]); for(int i = 0; i < n; i++) num[c[i]-1] = i+1; int k = n,l = 1; for(int i = 0; i < n; i++) { int o = 0; for(int j = l; ; j++) { if(j > n) j -= n; if(flag[j]) o++; if(j == num[i]) break; } a[i] = o; flag[num[i]] = 0; l = num[i]; m[i] = k--; } int m0,a0; if(MLSE(m0,a0,n)) { if(!a0) printf("%d\n",a0+m0); else printf("%d\n",a0); } else printf("Creation August is a SB!\n");}}
0 0
- HDU 5668 Circle (约瑟夫游戏,求解同余方程组)
- 约瑟夫环and同余方程组模板(exgcd求解同余方程组)
- HDU-5668-Circle(中国余数定理/解同余方程组)
- 同余方程组求解
- 求解线性同余方程组
- HDU 5668:Circle 同余方程
- POJ 2891(线性同余方程组的求解)
- 求解同余方程组(难度:2颗星)
- 模线性同余方程组求解
- 求解一元线性同余方程组模版
- hdu 3579 (同余方程组,逐一合并大法)
- Hdu 3579 Hello Kiki(同余模方程组)
- hdu 1573 X问题(一元线性同余方程组)
- hdu 3579 Hello Kiki(一元线性同余方程组)
- Hello Kiki hdu 3579 求解一元线性同余方程组ps:中国剩余定理
- HDU OJ 3579 Hello Kiki(线性同余方程组的合并求解)
- poj 1006+hdu 1788(中国剩余定理求解同余方程组)
- hdu 3579 Hello Kiki(求解线性同余模方程组的正整数解模板题)
- 解决SharePoint2013 升级后的网站集瘫痪的问题。“很抱歉,出了问题。文件未找到”
- Android 通知栏Notification的整合
- http 301、302、304、400、405、415状态码解释
- IIS8.0 HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置。
- GeoTrust 企业(OV)型 SSL证书
- HDU 5668 Circle (约瑟夫游戏,求解同余方程组)
- java简单排序之选择排序
- Ant的使用
- magento创建自定义运费
- lower_bound()和upper_bound()返回值
- 细说 ASP.NET Cache 及其高级用法
- Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
- Java对象表示方法2:XStream实现对象的XML话
- java/android 设计模式之单例模式