1 条题解
-
0
初始有 堆石子,每堆石子有 个(),两人轮流进行操作,一个人每次可以选取一堆石子将其分成两堆石子,并把其中一堆石子染成黑色,另一堆石子染成白色,这两堆石子的个数没有限制,但不能为 0(也即只有 1 个石子的堆是不能被划分的)。当所有堆都只含有 1 个石子时,游戏结束。此时 brz 的得分为白色的石子个数,Mandy 的得分为黑色的石子个数,问两人同等聪明的情况下 brz 先手能获得的分数。
注:染过色的石子是可以再被染色的。
关键点是只有 1 个石子的堆是不能被划分的,仔细想想,每次划分只有把 分成和,并把 的那堆染成对自己有利的颜色才能获得贡献(因为不能被划分了,颜色不会变)。更进一步,如果 是偶数,那么 和 均为奇数,你的贡献多了 ,别人下次操作 ,他的贡献也会多 ,并得到一堆偶数个数的石子,因此偶数个石子的堆是无净贡献的。那么当 为奇数时,分成了一堆偶数的和一堆只有 的,只有你的贡献会多 。综上,两人都会优先处理奇数个石子的堆,因此只有初始时这样的堆有奇数个,brz 的得分才会比 Mandy 的得分多 ,否则两人得分一样。
时间复杂度:
#include <iostream> #define endl '\n' using namespace std; using LL = long long; void solve(){ int n; cin >> n; LL sum = 0; for(int i = 0; i < n; i++){ int x; cin >> x; if(x == 1) continue; sum += x; } if(sum % 2 == 1) cout << "win" << endl; else cout << "lose" << endl; } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int T; cin >> T; while(T--){ solve(); } return 0; }
- 1
信息
- ID
- 2273
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- (无)
- 递交数
- 41
- 已通过
- 20
- 上传者