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]))。大数可以一边读入一边取模。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define mst(a,b) memset((a),(b),sizeof(a))
#define mp(a,b) make_pair(a,b)
#define fi first
#define se second
#define pi acos(-1)
#define pii pair<int,int>
const int INF = 0x3f3f3f3f;
const double eps = 1e-;
const int MAXN = 1e7 + ;
const int MAXM = 2e6 + ;
const ll mod = 1e9 + ; bool vis[];
int dp[][];
vector<int>vec;
int f[]; ll pow_mod(ll a, ll n) {
ll ans = ;
while(n) {
if(n & ) ans = ans * a % mod;
a = a * a % mod;
n >>= ;
}
return ans;
} int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
ll ans = ;
char ch;
int len = ;
int n = 1e9;
while() {
scanf("%c", &ch);
if(ch == ' ') break;
ans = pow_mod(ans, );
if(len == ) ans = ;
ans = ans * (1ll << (ch - '')) % mod;
if(len <= ) {
if(len == )
n = ;
n = n * + ch - '';
len++;
}
}
int x;
scanf("%d", &x);
int temp = x;
int a, b, c, d, e, k;
scanf("%d%d%d%d%d%d", &a, &b, &c, &d, &e, &k);
vec.push_back(x);
vis[x] = true;
for(int i = ; i <= ; i++) {
int x1 = 1ll * a * i * i % k * i * i % k;
int x2 = 1ll * b * i * i % k * i % k;
int x3 = 1ll * c * i * i % k;
int x4 = 1ll * d * i;
x = (x1 + x2 + x3 + x4 + e - ) % k + ;
f[i] = x;
}
int all = ;
while(all < n) {
all++;
int now = f[temp];
if(!vis[now]) {
vis[now] = true;
vec.push_back(now);
temp = now;
} else break;
}
int sz = vec.size();
dp[][] = ;
int pre = , now = ;
for(int i = ; i <= sz; i++) {
swap(pre, now);
int num = vec[i - ];
for(int j = ; j < ; j++) dp[now][j] = dp[pre][j];
for(int j = ; j < ; j++) {
dp[now][j ^ num] += dp[pre][j];
if(dp[now][j ^ num] >= mod) dp[now][j ^ num] -= mod;
}
}
ll sum = ;
for(int i = ; i < ; i++) {
sum += dp[now][i];
if(sum >= mod) sum -= mod;
}
ll inv = pow_mod(, sz);
inv = pow_mod(inv, mod - );
ans = ans * inv % mod;
ans = ans * sum % mod;
printf("%lld\n", ans);
return ;
}
ACM-ICPC 2018 南京赛区网络预赛 K. The Great Nim Game(博弈)的更多相关文章
- ACM-ICPC 2018 南京赛区网络预赛B
题目链接:https://nanti.jisuanke.com/t/30991 Feeling hungry, a cute hamster decides to order some take-aw ...
- 计蒜客 30996.Lpl and Energy-saving Lamps-线段树(区间满足条件最靠左的值) (ACM-ICPC 2018 南京赛区网络预赛 G)
G. Lpl and Energy-saving Lamps 42.07% 1000ms 65536K During tea-drinking, princess, amongst other t ...
- 计蒜客 30990.An Olympian Math Problem-数学公式题 (ACM-ICPC 2018 南京赛区网络预赛 A)
A. An Olympian Math Problem 54.28% 1000ms 65536K Alice, a student of grade 66, is thinking about a ...
- ACM-ICPC 2018 南京赛区网络预赛 B. The writing on the wall
题目链接:https://nanti.jisuanke.com/t/30991 2000ms 262144K Feeling hungry, a cute hamster decides to o ...
- ACM-ICPC 2018 南京赛区网络预赛
轻轻松松也能拿到区域赛名额,CCPC真的好难 An Olympian Math Problem 问答 只看题面 54.76% 1000ms 65536K Alice, a student of g ...
- ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze
262144K There are NN cities in the country, and MM directional roads from uu to v(1\le u, v\le n)v ...
- ACM-ICPC 2018 南京赛区网络预赛(12/12)
ACM-ICPC 2018 南京赛区网络预赛 A. An Olympian Math Problem 计算\(\sum_{i=1}^{n-1}i\cdot i!(MOD\ n)\) \(\sum_{i ...
- ACM-ICPC 2018 南京赛区网络预赛 J.sum
A square-free integer is an integer which is indivisible by any square number except 11. For example ...
- ACM-ICPC 2018 南京赛区网络预赛 E题
ACM-ICPC 2018 南京赛区网络预赛 E题 题目链接: https://nanti.jisuanke.com/t/30994 Dlsj is competing in a contest wi ...
随机推荐
- 在Ubuntu中搭建Python3的虚拟环境并开始django项目
搭建环境: 1.首先安装virtualenv: pip install virtualenv 2.创建虚拟环境:(指定安装Python3,若不写-p python3,默认安装Python2.7),en ...
- Pangu and Stones(HihoCoder-1636)(17北京OL)【区间DP】
题意:有n堆石头,盘古每次可以选择连续的x堆合并,所需时间为x堆石头的数量之和,x∈[l,r],现在要求,能否将石头合并成一堆,如果能,最短时间是多少. 思路:(参考了ACM算法日常)DP[i][j] ...
- WPF 位图处理相关类
位图的存储方式 开始之前,先了解下位图的存储方式 位图的像素都分配有特定的位置和颜色值.每个像素的颜色信息由RGB组合或者灰度值表示,根据位深度,可将位图分为1.4.8.16.24及32位图像等.每个 ...
- 【bitset】Kth Minimum Clique
#include<bits/stdc++.h> #define B bitset<105> using namespace std; typedef long long ll ...
- 【leetcode】74. 搜索二维矩阵
题目链接:传送门 题目描述 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 ...
- Delphi编译器属性(特别修饰符Ref,Unsafe,Volatile,Weak)
1 Refdelphi中常量参数就像一个本地常量,或者说只读变量.常量参数与值参数类似,除了不能在过程或函数体内给常量参数赋值,并且不能将常量参数传给另一个var类型参数.(但是,如果你常量参数传递的 ...
- 通过python的selenium实现网站自动登陆留言
from selenium import webdriver import time driver = webdriver.Chrome() driver.get('https://wordpress ...
- C# WebForm 屏蔽输入框的验证
按钮做界面跳转时,屏蔽输入框的验证可添加属性: CausesValidation="FALSE" <form runat="server"> &l ...
- zepto学习(三)之详解
zepto Zepto就是jQuery的移动端版本, 可以看做是一个轻量级的jQuery github地址: https://github.com/madrobby/zepto 官方地址: http: ...
- sip呼叫里SDP的一些字段的含义
v=0 o=- 1 0 IN IP4 164.135.25.51 #local ip ,即本机SIP信令交互地址 s=SNS call #用于传递会话主题 c=IN IP4 164.135.25.51 ...