由于士兵总数最多为 10^9,无法申请这么大的数组,又根据题目描述,最多选择 10^6 个士兵,就会进入循环(再次选择之前选择过的士兵),所以使用哈希链,用每个士兵的编号对 10^6 取余,余数相同的士兵放在同一个哈希链中。

#include <iostream>
#include <cstring>
using namespace std;
const int MAXL = 1000005;struct soldier //士兵
{int number; //编号int time; //被选中的次数soldier* next;
}*p[MAXL]; //哈希链数组,编号%MAXL相同的士兵放在同一个哈希链中soldier s[MAXL]; //士兵数组
__int64 N, a, b;
int total; //自杀士兵数量
int index; //士兵数组索引//选择士兵,num表示该士兵应该所在的哈希链的编号,x表示该士兵的编号
bool select(__int64 num, __int64 x)
{soldier* q;int flag = 0;for (q = p[num]; q != NULL; q = q->next) //搜索该士兵应该所在的哈希链{if (q->number == x) //找到该士兵{q->time++;if (q->time == 2) //被选中2次,该士兵自杀{++total;}else if (q->time == 3) //被选中3次,结束{return true;}flag = 1;break;}}if (flag == 0) //在哈希链中未找到该士兵,即第1次选中该士兵{q = &s[index++]; //将该士兵存入士兵数组q->number = x;q->time = 1;q->next = p[num]; //将该士兵加入其应该所在的哈希链p[num] = q; //更新该哈希链的头指针}return false;
}int main()
{while (cin >> N){if (N == 0)break;cin >> a >> b;memset(p, NULL, sizeof(p));total = 0;index = 0;__int64 num = b % N; //每次选中的士兵的编号while (select(num % MAXL, num) == false){num = (((a * num) % N * num) % N + b) % N;}cout << N - total << endl;}return 0;
}

继续加油。

HDU 1488(Flavius Josephus Reloaded)相关推荐

  1. hdu 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】(转)

    HDU 动态规划(46道题目)倾情奉献~ [只提供思路与状态转移方程] Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955      背包 ...

  2. Good Luck in CET-4 Everybody! HDU - 1847 (巴氏博弈)

    Good Luck in CET-4 Everybody! HDU - 1847 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Ci ...

  3. hdu 4090(搜索+可行性剪枝)

    解题思路:这道题一开始我想用bfs,但这道题我感觉难的是每次消除后,怎么往下往左移动.此外还有就是要剪枝,不然是过不了的,可采用可行性剪枝,即当前的得分加上当前状态下可能得到的最大分,如果还不能够达到 ...

  4. hdu 4983(欧拉函数)

    题目大意:给出一组n和k,求解满足公式:gcd(n-a,n)*gcd(n-b,n)=n^k的(a,b)的对数,结果对(1e9+7)取模. 先证明:对于1<=x<=n,有gcd(n-x , ...

  5. Keywords Search HDU - 2222(AC自动机模板)

    题意: 给定 n个长度不超过 50的由小写英文字母组成的单词准备查询,以及一篇文章,问:文中出现了多少个待查询的单词.多组数据. 题目: In the modern time, Search engi ...

  6. HDU 1848(SG函数应用)

    原文链接:http://hi.baidu.com/king___haha/item/542a071140107f9598ce337c fib[1..]={1,2,3,5,8,13,21,...};是菲 ...

  7. A - Age of Moyu HDU - 6386(Dijkstra+堆优化)

    要解决这道题,可以用dfs+bfs,但是我不会,所以我只会dijkstra算法: 要解决这道题必须明白迪杰斯特拉算法的核心思想,我是这样理解的: 我可以任意举例一个图: 比如这个图,那么求1-6的最短 ...

  8. ACM学习历程—HDU 2112 HDU Today(map spfa 优先队列)

    Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD夫妇也退居了二线 ...

  9. 教你小小JAVA爬虫爬到HDU首页(只为学习)

    记得以前刷hdu的时候总是发现有人能一分钟内提交很多次 而且还ac  感觉不可思议.后来百度搜了搜 原来是网络爬虫 带着这一届acm成员集训的时候有成员说hdu炸了  一直判断中  我就说是爬虫... ...

最新文章

  1. MySql UNIX_TIMESTAMP和FROM_UNIXTIME函数讲解
  2. dump java崩溃自动 不生成_一个宏命令,就可以程序崩溃时生成dump文件
  3. Django框架(15.Django中的自关联)
  4. require.js学习记录
  5. P1993 小K的农场 (差分约束)
  6. 前端学习(908):location常用方法
  7. spring拦截器-过滤器的区别
  8. Oracle11gR2 RAC+DataGuard安装实施维护2+1_数据库集群容灾视频教程
  9. 从零开始学keras之变分自编码器生成图像
  10. tc.html是什么页面,HTML iframe属性详细说明
  11. http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=9332 多broser
  12. paip.SVN无法提交--提示冲突的解决
  13. intel无线网卡linux驱动安装,Ubuntu应用---安装 Intel Wireless-AC 9462 无线网卡驱动(无法连接wifi,完美解决)...
  14. PHP 零基础入门笔记(1):PHP 基础
  15. 如何安装Eclipse WTP插件
  16. linux 时间戳计数器,用时间戳计数器测量频率的方法(下)-测试测量-与非网
  17. Payment:支付宝即时到账接口接入教程
  18. RetinaNet模型在DDSM数据集的应用问题(2)
  19. java.lang.Exception: Method XXX should have no parameters
  20. idea风格ui java_IDEA界面太丑??尝试一下这几个风格

热门文章

  1. Linux系统下载安装数据库MariaDB
  2. Python基础编程入门实例:恺撒密码
  3. Python_PyQuery使用
  4. hbase原理架构总结
  5. HTML/CSS实现毛玻璃特效的两种方法
  6. python 关于识别excel中单元格是否含有删除线
  7. ignore的音标_英语ignore的意思解释|读音发音|相关词语_英语词典_词林在线词典...
  8. Mini字幕滚动器/迷你字幕滚动器(单机版/试用版)v1.8 最新版
  9. VS2015 安装.NET Core环境
  10. 国外便宜服务器租用有哪些问题