2976: [Poi2002]出圈游戏

题目连接:

http://www.lydsy.com/JudgeOnline/problem.php?id=2976

Description

Input

中第一行有一个正整数n, 2 <= n <= 20,第二行有n 个整数其中第i个整数表示编号为i 的小朋友第i个出圈。

Output

求最小的K,如果不存在,则输出一个单词“NO”

Sample Input

4

1 4 2 3

Sample Output

5

Hint

题意

题解:

转化一下,其实就是模线性方程组,这个玩意儿用CRT怼一波就好了

然而BZOJ这道题不是输出NO,而是输出NIE

BC这道题却题面写错了,我比赛后才反应过来这道题的题意

sad……

代码是BZOJ的那道题代码,HDU的需要加上test,和 CA是SB这句话

代码

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <algorithm>
  4. #include <cstring>
  5. using namespace std;
  6. const int M = 30;
  7. long long Egcd (long long a, long long b, long long &x, long long &y)
  8. {
  9. if (b == 0)
  10. {
  11. x = 1, y = 0;
  12. return a;
  13. }
  14. long long d, tp;
  15. d = Egcd (b, a%b, x, y);
  16. tp = x;
  17. x = y;
  18. y = tp - a/b*y;
  19. return d;
  20. }
  21. long long CRT2 (long long b[], long long n[], int num)
  22. {
  23. int i;
  24. bool flag = false;
  25. long long n1 = n[0], n2, b1 = b[0], b2, bb, d, t, k, x, y;
  26. for (i = 1; i < num; i++)
  27. {
  28. n2 = n[i], b2 = b[i];
  29. bb = b2 - b1;
  30. d = Egcd (n1, n2, x, y);
  31. if (bb % d) //模线性解k1时发现无解
  32. {
  33. flag = true;
  34. break;
  35. }
  36. k = bb / d * x; //相当于求上面所说的k1【模线性方程】
  37. t = n2 / d;
  38. if (t < 0) t = -t;
  39. k = (k % t + t) % t; //相当于求上面的K`
  40. b1 = b1 + n1*k;
  41. n1 = n1 / d * n2;
  42. }
  43. if (flag)
  44. return -1; //无解
  45. return b1; //形成的解:b1, b1+n1, b1+2n1,..., b1+xni...
  46. }
  47. int vis[30];
  48. long long b[M], n[M];
  49. long long t, num, i, cc = 1;
  50. pair<int,int>P[M];
  51. int main()
  52. {
  53. scanf ("%d",&num);
  54. for (i = 0; i < num; i++)
  55. n[i]=num-i;
  56. for (i = 0; i < num; i++)
  57. {
  58. scanf("%d",&P[i].first);
  59. P[i].second = i;
  60. }
  61. sort(P,P+num);
  62. int las = num-1;
  63. for (i = 0; i < num; i++)
  64. {
  65. int x;x=P[i].second;
  66. int ttt = 0;
  67. while(1)
  68. {
  69. las++;
  70. las%=num;
  71. if(vis[las])continue;
  72. if(las==x)
  73. {
  74. b[i]=ttt;
  75. vis[las]=1;
  76. break;
  77. }
  78. ttt++;
  79. }
  80. }
  81. long long p = CRT2(b,n,num);
  82. if(p==-1)printf("NIE\n");
  83. else printf("%lld\n",p+1);
  84. return 0;
  85. }

BZOJ 2976: [Poi2002]出圈游戏 HDU 5668 CRT的更多相关文章

  1. BZOJ 2976: [Poi2002]出圈游戏 Excrt+set

    人数很少,可以直接用 $set$ 来模拟人的情况. 然后就能得到若干个方程,用 $excrt$ 进行合并即可. #include <set> #include <cmath> ...

  2. BZOJ2976:[POI2002]出圈游戏(exCRT)

    Description 有编号从1到n的n个小朋友在玩一种出圈的游戏,编号为i+1的小朋友站在编号为i小朋友左边.编号为1的小朋友站在编号为n的小朋友左边.首先编号为1的小朋友开始报数,接着站在左边的 ...

  3. BZOJ2976 : [Poi2002]出圈游戏

    首先模拟一遍得到n个同余方程,然后用扩展欧几里得求出最小的可行解即可,时间复杂度$O(n^2)$. #include<cstdio> #define N 30 int n,i,j,k,x, ...

  4. 华为2013校招之哈工大威海 上机试题之一:报数问题:设有N 个人围坐一圈并按顺时针方向从1 到N 编号,从第S个人开始进行1 到M报数,报 数到第 M个人时,此人出圈,再从他的下一个人重新开始1 到 M的报数,如此进行下去直 到所有的人都出圈为止。现要打印出出圈次序。

    1.  报数游戏 问题描述: 设有N 个人围坐一圈并按顺时针方向从1 到N 编号,从第S个人开始进行1 到M报数,报 数到第 M个人时,此人出圈,再从他的下一个人重新开始1 到 M的报数,如此进行下去 ...

  5. BZOJ 1444:[JSOI2009]有趣的游戏

    BZOJ 1444:[JSOI2009]有趣的游戏 题目链接 首先我们建出Trie图,然后高斯消元. 我们设\(f_i\)表示经过第\(i\)个点的期望次数: \[ f_x=\sum i\cdot p ...

  6. 牛客网 江西财经大学第二届程序设计竞赛同步赛 D.绕圈游戏-(跳青蛙游戏)找数的所有因子就可以了

    链接:https://ac.nowcoder.com/acm/contest/635/D来源:牛客网 D.绕圈游戏 433为了帮ddd提升智商,决定陪他van特殊的游戏.433给定一个带有n个点的环, ...

  7. 取(2堆)石子游戏 HDU 2177 博弈论

    取(2堆)石子游戏 HDU 2177 博弈论 题意 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中 ...

  8. 取石子游戏 HDU 1527 博弈论 威佐夫博弈

    取石子游戏 HDU 1527 博弈论 威佐夫博弈 题意 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两 ...

  9. Java简单算法--出圈问题

    package cn.magicdu.algorithm; import java.util.LinkedList; import java.util.List; /** * 出圈问题,数到某个数字的 ...

随机推荐

  1. Battery Charging Specification 1.2 中文详解 来源:www.chengxuyuans.com

    1. Introduction 1.1 Scope 规范定义了设备通过USB端口充电的检测.控制和报告机制,这些机制是USB2.0规范的扩展,用于专用 充电器(DCP).主机(SDP).hub(SDP ...

  2. WPF之换肤

    WPF之换肤 设计原理 WPF换肤的设计原理,利用资源字典为每种皮肤资源添加不同的样式,在后台切换皮肤资源文件. 截图 上图中,第一张图采用规则样式,第二张图采用不规则样式,截图的时候略有瑕疵. 资源 ...

  3. Hibernate根据配置文件,生成建表语句

    import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; public class ...

  4. Python股票信息抓取(二)

    在一的基础上,想着把所有的折线图放在一个图中,然后图的结果如图所示: 不是略丑,是很丑~ 依然的单进程,只是将图标结果放在了一张图里 代码如下: #-*-coding:utf-8 -*- import ...

  5. iOS控制器与视图加载方法

    转载记录, 请看原文: 1. iOS中的各种加载方法(initWithNibName,loadNibNamed,initWithCoder,awakeFromNib等等)简单使用   http://w ...

  6. [实战]MVC5+EF6+MySql企业网盘实战(24)——视频列表

    写在前面 上篇文章实现了文档列表,所以实现视频列表就依葫芦画瓢就行了. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) ...

  7. 某PCBA企业应用易普优APS实现高级计划排程案例

    一.项目介绍 1.生产计划现状 某PCBA企业(以下简称A企业)的产品生产是典型的多品种.小批量.多变化的生产模式.其中产品种类有1000多种,主流的200多种,每个月数百个生产订单,分解到工序以后的 ...

  8. 分页查询和redis

    问题 我在做论坛的是时候遇到了如下的问题.论坛里可以有很多的主题topic,每个topic对应到很多回复reply.现在要查询某个topic下按照replyTime升序排列的第pageNo页的repl ...

  9. Java 爬虫之Webmagic

    1. 一个框架,一个领域 一个好的框架必然凝聚了领域知识.WebMagic的设计参考了业界最优秀的爬虫Scrapy,而实现则应用了HttpClient.Jsoup等Java世界最成熟的工具,目标就是做 ...

  10. 用vue-wechat-title为微信动态设置标题

    1.安装插件 cnpm install vue-wechat-title --save 2.在main.js中引入 Vue.use(require('vue-wechat-title')) 3.在路由 ...