1068 bash遊戲 v3
基準時間限制:1 秒 空間限制:131072 kb 分值: 20 難度:3級演算法題
收藏關注有一堆石子共有n個。a b兩個人輪流拿,a先拿。每次拿的數量只能是2的正整數次冪,比如(1,2,4,8,16....),拿到最後1顆石子的人獲勝。假設a b都非常聰明,拿石子的過程中不會出現失誤。給出n,問最後誰能贏得比賽。
例如n = 3。a只能拿1顆或2顆,所以b可以拿到最後1顆石子。(輸入的n可能為大數)
input
第1行:乙個數t,表示後面用作輸入測試的數的數量。(1 <= t <= 1000)output第2 - t + 1行:每行1個數n。(1 <= n <= 10^1000)
共t行,如果a獲勝輸出a,如果b獲勝輸出b。input示例
323output示例4
aba2的冪看上去很厲害的樣子,然而這題還是屬於bash博弈的變形,所以做法還是打表找規律
然後發現只要是3的倍數就是b贏
不過這題有個問題,就是會有大數,然後我就直接套了個大數模板 其實想起來只要每一位去除3看可不可以就行了 不過也懶得改了
#include #include #include #include #include #include #include #include #include using namespace std;#define fin freopen("input.txt","r",stdin);
#define fout freopen("output.txt","w",stdout);
#define inf 0x3f3f3f3f
#define infll 0x3f3f3f3f3f3f3f
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
typedef long long ll;
typedef pairpii;
using namespace std;
const int mx = 2500;
const int maxn = 9999;
const int dlen = 4;
/*已過載》+- % 和print*/
class big
a[len++] = d;
}big(const char *s)
a[index++] = t;}}
big operator/(const int &b)const
ret.len = len;
while(ret.a[ret.len - 1] == 0 && ret.len > 1) ret.len--;
return ret;
}bool operator>(const big &t)const else return false;
}big operator+(const big &t)const
}if(t.a[big] != 0) t.len = big + 1;
else t.len = big;
return t;
}big operator-(const big &t)const else
big = t1.len;
for(i = 0; i < big; i++) else t1.a[i] -= t2.a[i];
}t1.len = big;
while(t1.a[t1.len - 1] == 0 && t1.len > 1)
if(flag) t1.a[big - 1] = 0 - t1.a[big - 1];
return t1;
}int operator%(const int &b)const
return d;
}big operator*(const big &t) const else
}if(up != 0)
}ret.len = i + j;
while(ret.a[ret.len - 1] == 0 && ret.len > 1) ret.len--;
return ret;
}void print()
};int main()
return 0;
}
51nod 1066 Bash遊戲 Bash博弈
1066 bash遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 收藏關注有一堆石子共有n個。a b兩個人輪流拿,a先拿。每次最少拿1顆,最多拿k顆,拿到最後1顆石子的人獲勝。假設a b都非常聰明,拿石子的過程中不會出現失誤。給出n和k,問最後誰能贏得比賽。例如n ...
51nod 1066 Bash遊戲 博弈
1066 bash遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 有一堆石子共有n個。a b兩個人輪流拿,a先拿。每次最少拿1顆,最多拿k顆,拿到最後1顆石子的人獲勝。假設a b都非常聰明,拿石子的過程中不會出現失誤。給出n和k,問最後誰能贏得比賽。例如n 3,k ...
51Nod 1066 Bash遊戲(博弈)
基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 有一堆石子共有n個。a b兩個人輪流拿,a先拿。每次最少拿1顆,最多拿k顆,拿到最後1顆石子的人獲勝。假設a b都非常聰明,拿石子的過程中不會出現失誤。給出n和k,問最後誰能贏得比賽。例如n 3,k 2。無論a如何拿,b都可...