2024.3.15 【世间情动,不过盛夏白瓷梅子汤,碎冰碰壁当啷响。】
Friday 二月初六
一些可以打神奇优化的函数重载
- max
int jntm(int a,int b){return a>b?a:b;}
//max_
- min
int ngm (int a,int b){return a<b?a:b;}
//min_
- abs
int hhy (int a){return a<0?-a:a;}
//abs_
- gcd
int jgby(int a,int b){while(b^=a^=b^=a%=b);return a;}
//gcd
- pow
int bjwd(int a,int b,int t=1){for(;b;b>>=1,a=a*a%mod)if(b&1)t=t*a%mod;return t;}
//qpow
- read
char *p1,*p2,buf[100000];
#define nc() (p1==p2 && (p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
int cgtt(){
int x=0,f=1;char ch=nc();
while(ch<48||ch>57){if(ch=='-')f=-1;ch=nc();}
while(ch>=48&&ch<=57)x=(x<<1)+(x<<3)+ch-48,ch=nc();
return x*f;}
//read
- write
void hll(int x){
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);putchar(x%10+'0');
return;}
//write
题目描述
有 n n n 枚石子。两位玩家定了如下规则进行游戏:
- Mirko 先取一次,Slavko 再取一次,然后 Mirko 再取一次,两人轮流取石子,以此类推;
- Mirko 在第一次取石子时可以取走任意多个;
- 接下来,每次至少要取走一个石子,最多取走上一次取的数量的 2 2 2 倍。当然,玩家取走的数量必须不大于目前场上剩余的石子数量。
- 取走最后一块石子的玩家获胜。
双方都以最优策略取石子。Mirko 想知道,自己第一次至少要取走几颗石子最终才能够获胜。
输入格式
输入一行一个整数 n n n,表示石子的数量。
输出格式
输出一行一个整数,表示 Mirko 最少取多少石子可以保证获胜。
样例 #1
样例输入 #1
4
样例输出 #1
1
样例 #2
样例输入 #2
7
样例输出 #2
2
样例 #3
样例输入 #3
8
样例输出 #3
8
提示
样例 1 解释
对于这个样例,Mirko 第一次可以取 1 / 2 / 3 / 4 1/2/3/4 1/2/3/4 个。虽然他取 4 4 4 个会直接赢得比赛,但这并不是最少的。最少的方案是取走 1 1 1 个。这样 Slavko 只能取走 1 1 1 个或者 2 2 2 个。无论选择哪种,Mirko 下一步都能取走所有的石子并获胜。
数据规模与约定
对于 100 % 100\% 100% 的数据,保证 2 ≤ n ≤ 1 0 15 2\le n\le 10^{15} 2≤n≤1015。
说明
题目译自 COCI2010-2011 CONTEST #4 T6 HRPA。
//2024.3.15
//by white_ice
#include<bits/stdc++.h>
using namespace std;
long long n,x,y,z;
int main(){
cin>>n;
while(1){
if(n==1){
cout << 1;
return 0;
}
if(n==2){
cout << 2;
return 0;
}
x=1,y=2,z=3;
while(z<n)
x=y,y=z,z=x+y;
if(z==n){
cout << z;
return 0;
}
else n-=y;
}
return 0;
}
斐波那契博弈
这是个什么东西呢?
啊以上题面其实讲的挺清楚的。下面先引入一个重要引理:
“Zeckendorf定理”(齐肯多夫定理):任何正整数可以表示为若干个不连续的Fibonacci数之和。
我们来总结下规律:
n 为 2 时后手胜。
n 为 3 时后手胜。
n 为 4 时,先手的人想获胜就必须先拿 1 个,这时剩余的石子数为 3,此时无论后手的人如何取,先手的人都能赢,所以是先手胜。
n 为 5 时后手胜。
n 为 6 时,先手的人只要取走 1个,就可以让局势变成 n 为 5 的情形,所以先手胜。
n 为 7 时,先手可以取 2 个,局势又变成 n 为 55 的情形,所以先手胜。
n 为 8 时后手胜。
这是什么?
这不就是斐波那契吗。好的讲完了。
啊我爱博弈论