Yet Another Stones Game(SG函數&博弈論)
思路:博弈問題考慮每個子游戲的和,當時,顯然就是最小子游戲。所以對開始考慮,假設先手所選的兩堆爲,不妨設.
顯然有.
後繼狀態只有.
同理。
依次類推。
顯然取決於最小的那一堆,因爲每次都必須至少拿一個,至多將那堆全部拿掉,而前面的狀態的值是.
所以.
所以判斷一下最小值是否大於即可。若大於則
反之先手可以讓對手處於該局面。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
#define mst(a) memset(a,0,sizeof a)
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int a[n+1];
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+n+1);
if(a[1]==a[n/2+1]) puts("Sad Little Gyro");
else puts("Happy Little Gyro");
}
return 0;
}