ACM-ICPC 2018 南京赛区网络预赛 K. The Great Nim Game(博弈)
题目链接:https://nanti.jisuanke.com/t/31000
题意:有N堆石子(N为大数),每堆的个数按一定方式生成,问先手取若干堆进行尼姆博弈,必胜的方式有多少种。
题解:因为 k < 4096,所以出现的数最多只有4096个,对每个数字只考虑出现奇/偶次进行dp,答案是所有不等于0的dp值的和。然后如果一个数字出现x次,它对自己出现奇数次的方案数和偶数次的方案数贡献都是乘上2 ^ (x - 1),每个数字的贡献都是2 ^ (x - 1) 总贡献就是2 ^ (N - ∑(vis[i]))。大数可以一边读入一边取模。
1 #include <bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define ull unsigned long long 5 #define mst(a,b) memset((a),(b),sizeof(a)) 6 #define mp(a,b) make_pair(a,b) 7 #define fi first 8 #define se second 9 #define pi acos(-1) 10 #define pii pair<int,int> 11 const int INF = 0x3f3f3f3f; 12 const double eps = 1e-6; 13 const int MAXN = 1e7 + 10; 14 const int MAXM = 2e6 + 10; 15 const ll mod = 1e9 + 7; 16 17 bool vis[4105]; 18 int dp[2][8192]; 19 vector<int>vec; 20 int f[4105]; 21 22 ll pow_mod(ll a, ll n) { 23 ll ans = 1; 24 while(n) { 25 if(n & 1) ans = ans * a % mod; 26 a = a * a % mod; 27 n >>= 1; 28 } 29 return ans; 30 } 31 32 int main() { 33 #ifdef local 34 freopen("data.txt", "r", stdin); 35 // freopen("data.txt", "w", stdout); 36 #endif 37 ll ans = 0; 38 char ch; 39 int len = 0; 40 int n = 1e9; 41 while(1) { 42 scanf("%c", &ch); 43 if(ch == ' ') break; 44 ans = pow_mod(ans, 10); 45 if(len == 0) ans = 1; 46 ans = ans * (1ll << (ch - '0')) % mod; 47 if(len <= 5) { 48 if(len == 0) 49 n = 0; 50 n = n * 10 + ch - '0'; 51 len++; 52 } 53 } 54 int x; 55 scanf("%d", &x); 56 int temp = x; 57 int a, b, c, d, e, k; 58 scanf("%d%d%d%d%d%d", &a, &b, &c, &d, &e, &k); 59 vec.push_back(x); 60 vis[x] = true; 61 for(int i = 1; i <= 4100; i++) { 62 int x1 = 1ll * a * i * i % k * i * i % k; 63 int x2 = 1ll * b * i * i % k * i % k; 64 int x3 = 1ll * c * i * i % k; 65 int x4 = 1ll * d * i; 66 x = (x1 + x2 + x3 + x4 + e - 1) % k + 1; 67 f[i] = x; 68 } 69 int all = 0; 70 while(all < n) { 71 all++; 72 int now = f[temp]; 73 if(!vis[now]) { 74 vis[now] = true; 75 vec.push_back(now); 76 temp = now; 77 } else break; 78 } 79 int sz = vec.size(); 80 dp[0][0] = 1; 81 int pre = 1, now = 0; 82 for(int i = 1; i <= sz; i++) { 83 swap(pre, now); 84 int num = vec[i - 1]; 85 for(int j = 0; j < 8192; j++) dp[now][j] = dp[pre][j]; 86 for(int j = 0; j < 8192; j++) { 87 dp[now][j ^ num] += dp[pre][j]; 88 if(dp[now][j ^ num] >= mod) dp[now][j ^ num] -= mod; 89 } 90 } 91 ll sum = 0; 92 for(int i = 1; i < 8192; i++) { 93 sum += dp[now][i]; 94 if(sum >= mod) sum -= mod; 95 } 96 ll inv = pow_mod(2, sz); 97 inv = pow_mod(inv, mod - 2); 98 ans = ans * inv % mod; 99 ans = ans * sum % mod; 100 printf("%lld\n", ans); 101 return 0; 102 }
转载于:https://www.cnblogs.com/scaulok/p/9573791.html
ACM-ICPC 2018 南京赛区网络预赛 K. The Great Nim Game(博弈)相关推荐
- ACM-ICPC 2018 南京赛区网络预赛
轻轻松松也能拿到区域赛名额,CCPC真的好难 An Olympian Math Problem 问答 只看题面 54.76% 1000ms 65536K Alice, a student of gra ...
- ACM-ICPC 2018 南京赛区网络预赛 B. The writing on the wall
题目链接:https://nanti.jisuanke.com/t/30991 2000ms 262144K Feeling hungry, a cute hamster decides to ord ...
- ACM-ICPC 2018 南京赛区网络预赛 AC Challenge
Dlsj is competing in a contest with n (0 < n \le 20)n(0<n≤20) problems. And he knows the answe ...
- ACM-ICPC 2018 南京赛区网络预赛 E AC Challenge(状压dp)
Dlsj is competing in a contest with n (0 < n \le 20)n(0<n≤20) problems. And he knows the answe ...
- ACM-ICPC 2018 南京赛区网络预赛 Lpl and Energy-saving Lamps 线段树
目录 ACM-ICPC 2018 南京赛区网络预赛 Lpl and Energy-saving Lamps 线段树 题面 题意 思路 ACM-ICPC 2018 南京赛区网络预赛 Lpl and En ...
- ACM-ICPC 2018 南京赛区网络预赛 - AC Challenge(状压DP)
ACM-ICPC 2018 南京赛区网络预赛 - AC Challenge 题意: 有n个题目,每个题目有一些信息,,第 t 个过第 i 题会得到分数 t*ai + bi 在过第 i 题前必须要先过 ...
- E. AC Challenge ACM-ICPC 2018 南京赛区网络预赛 状压dp + 枚举状态
博客目录 原题 题目链接 Dlsj is competing in a contest with n (0 < n \le 20)n(0<n≤20) problems. And he kn ...
- ACM-ICPC 2018 南京赛区网络预赛(ABCDEFGHIJKL所有题题解大全)
新高一蒟蒻队的第一次ACM-- 赛场上和队友时间安排不太恰当--只过了9题,第10题差半个小时2333--/还是自己太弱了 赛后经过一段时间把所有题全部A掉了2333-- A:题目链接 这道题在聊天中 ...
- ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze 最短路+分层图
类似题解 There are NN cities in the country, and MM directional roads from uu to v(1\le u, v\le n)v(1≤u, ...
最新文章
- java 唯一值_java – 在列表中查找唯一值的快速方法
- E.Text Editor (Gym 101466E + 二分 + kmp)
- Castle.ActiveRecord的嵌套事务处理
- python文件编码与解码_Python读取文件编码解码问题
- spring的aop注解配置(了解)
- Serverless——前端的3.0时代
- window.onload,body onload=function(), document.onreadystatechange, httpRequest.onreadystatechang
- 最短路dijkstra算法详解_最短路径问题---Dijkstra算法详解
- shell 获取值 默认值
- ionic cordova 引用百度地图以及利用手机GPS定位
- PyCharm取消启动时自动加载项目
- 基于MVC的jpetstore项目分析
- Qt——P26 Label控件显示图片
- Facebook开发地面技术扩大互联网连接
- 在MATLAB中快速画圆(给出圆心坐标和半径就能直接画的那种)
- C++ Primer 第5版--练习8.5
- 快速上手Android蓝牙串口开发
- webstorm下载安装过程打开项目
- 大数据学习之一——Hadoop单机部署
- 实现表格隔行变色的方法
热门文章
- android studio大作业-简易计算器实现
- ESIM模型的“全能版”!网易易盾实验室研究员解读HIM混合推理模型
- 全民一起玩Python提高篇第十二课:面向对象基本原理与语法(三)
- 5G NR 网络切片是什么意思
- 未来计算机畅想英语作文,畅想未来的生活life in the future
- 命题逻辑完备性定理证明
- 八爪鱼爬取列表数据和详情页数据(国内网址)
- 【Faster R-CNN论文精度系列】从Faster R-CNN源码中,我们“学习”到了什么?
- 小米最大的竞争对手不是苹果而是华为
- 非常道:ChatGPT 与思想革命