FZU 2240 Daxia Suneast's problem
博弈,$SG$函数,规律,线段树。
这个问题套路很明显,先找求出$SG$函数值是多少,然后异或起来,如果是$0$就后手赢,否则先手赢。修改操作和区间查询的话可以用线段树维护一下区间异或和。
数据那么大,一看就知道$SG$有规律......
先写个小数据的$SG$找规律:
bool f[200]; int sg[200];int SG(int x) {memset(f,0,sizeof f);for(int i=x-1;i>=x/2;i--){if(x-i>i) break;f[sg[i]]=1;}for(int i=0;i<=100;i++){if(f[i]==1) continue;return i;} }
View Code
会发现是这样的东西:
LL SG(LL x) {if(x%2==0) return x/2;return SG(x/2); }
View Code
注意:$FZU$上$\% lld$会出问题,我用Visual C++交才过的。
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<map> #include<set> #include<queue> #include<stack> #include<iostream> using namespace std; typedef long long LL; const double pi=acos(-1.0),eps=1e-8; void File() {freopen("D:\\in.txt","r",stdin);freopen("D:\\out.txt","w",stdout); } template <class T> inline void read(T &x) {char c = getchar(); x = 0;while(!isdigit(c)) c = getchar();while(isdigit(c)) { x = x * 10 + c - '0'; c = getchar(); } }LL SG(LL x) {if(x%2==0) return x/2;return SG(x/2); }const int maxn=100010; int n,m; LL s[4*maxn];void build(int l,int r,int rt) {s[rt]=0;if(l==r){scanf("%lld",&s[rt]);s[rt]=SG(s[rt]);return;}int m=(l+r)/2;build(l,m,2*rt);build(m+1,r,2*rt+1);s[rt]=s[2*rt]^s[2*rt+1]; }void update(int p,LL v,int l,int r,int rt) {if(l==r) { s[rt]=v; return;}int m=(l+r)/2;if(p<=m) update(p,v,l,m,2*rt);else update(p,v,m+1,r,2*rt+1);s[rt]=s[2*rt]^s[2*rt+1]; }LL get(int L,int R,int l,int r,int rt) {if(L<=l&&r<=R) return s[rt];int m=(l+r)/2;LL x1=0,x2=0;if(L<=m) x1=get(L,R,l,m,2*rt);if(R>m) x2=get(L,R,m+1,r,2*rt+1);return x1^x2; }int main() {while(~scanf("%d%d",&n,&m)){build(1,n,1);for(int i=1;i<=m;i++){int p,L,R; LL x;scanf("%d%lld%d%d",&p,&x,&L,&R);x=SG(x); update(p,x,1,n,1);LL y=get(L,R,1,n,1);if(y) printf("daxia\n");else printf("suneast\n");}}return 0; }
转载于:https://www.cnblogs.com/zufezzt/p/5824607.html
FZU 2240 Daxia Suneast's problem相关推荐
- FZU Problem 2240 Daxia Suneast's problem(博弈+[单点更新,区间查询]线段树)
此文章可以使用目录功能哟↑(点击上方[+]) FZU Problem 2240 Daxia & Suneast's problem Accept: 0 Submit: 0 Time L ...
- fzu 2238 Daxia Wzc's problem
Problem 2238 Daxia & Wzc's problem Accept: 38 Submit: 136 Time Limit: 1000 mSec Memory Lim ...
- FZU 2238 - Daxia Wzc's problem(Lucas)
Problem 2238 Daxia & Wzc's problem Accept: 42 Submit: 166 Time Limit: 1000 mSec Memory Lim ...
- FZU 2238 Daxia Wzc's problem
Daxia在2016年5月期间去瑞士度蜜月,顺便拜访了Wzc,Wzc给他出了一个问题: Wzc给Daxia等差数列A(0),告诉Daxia首项a和公差d; 首先让Daxia求出数列A(0)前n项和,得 ...
- FZU 2238 Daxia Wzc's problem【规律+lucas】
Daxia在2016年5月期间去瑞士度蜜月,顺便拜访了Wzc,Wzc给他出了一个问题: Wzc给Daxia等差数列A(0),告诉Daxia首项a和公差d; 首先让Daxia求出数列A(0)前n项和,得 ...
- FZU 2239 Daxia Yayamao's problem 斜率优化
题目链接点这里 我们先把a从小到大排序,询问x从小到大排序 我们可以发现,对于某对 ai和a(i+1)..如果我们有xi,此时取a(i+1)可以使xi的函数值最大的话,那么对于任意大于xi的x,取a( ...
- FZU Problem 2238 Daxia Wzc's problem(Lucas定理求组合数)
此文章可以使用目录功能哟↑(点击上方[+]) FZU Problem 2238 Daxia & Wzc's problem Accept: 0 Submit: 0 Time Limit ...
- FZU-2239 Daxia Yayamao's problem(斜率优化)
Daxia & Yayamao's problem FZU - 2239 题解:f(x)=A*x+B 如果j>k,Aj>Ak,Aj*x+Bj>=Ak*x+Bk,则(Bj-Bk ...
- FZU Problem 2238 Daxia Wzc's problem
Daxia在2016年5月期间去瑞士度蜜月,顺便拜访了Wzc,Wzc给他出了一个问题: Wzc给Daxia等差数列A(0),告诉Daxia首项a和公差d; 首先让Daxia求出数列A(0)前n项和,得 ...
最新文章
- SD卡读写扇区注意事项(转)
- 【洛谷 - 快来签到】(数学,公式,溢出爆longlong的处理)
- SpringMVC 中设置日期字符串转换格式
- QT 网络编程(1)
- phpcmsV9 邮箱配置(含图文教程) - 案例篇
- ajax跨越html,ajax跨域的解决方案
- python中如何导入数据包_如何在python中发送数据包?
- Win10彻底关闭Antimalware Service Executable占用内存过高问题
- redis实战之事务与持久化
- Python基本语法(快速入门)
- 沙盘erp模拟人机对抗如何将公司经营6年
- Ubuntu20.04下载安装CMake
- 年会将近,如何用Excel做个抽奖界面?
- java 保存微信表情_【java】【mysql】存储微信表情emoji表情
- 2021世界人工智能大会(WAIC2021):深思考人工智能获颁工信部人工智能产业创新“揭榜优胜单位”!
- pytorch——weights_init(m)
- web前端面试题之魂(js)
- 一键式统计6.0通透
- html5 canvas创建弹性碰撞动画
- CAE(Convolutional Auto-Encode) 卷积自编码