题解:P12063 [THUPC 2025 决赛] 我的围棋

· · 题解

P12063 [THUPC 2025 决赛] 我的围棋

准备安放棋子吧哈哈!

写完题解的本蒟蒻突然发其它题解都在整活,于是……

围棋作为一项传承千年的策略博弈,其核心精神在于公平竞技与智慧较量。"送子吃以撑爆棋盒"的说法虽带有幽默色彩,但本质上违背了围棋的文化内涵与竞技原则。

从竞技层面看,围棋胜负取决于实地争夺与局势判断。主动送吃无异于自毁棋形,不仅会丧失目数优势,更会破坏棋局平衡。《棋经》云"弃小而不救者,有图大之心",任何落子都需服务于全局战略,无谓送子实属非理性行为。职业比赛中,类似操作会导致己方迅速溃败。

从文化视角而言,围棋讲究"手谈"的君子之风。唐代王积薪《十诀》首条即强调"不得贪胜",强调对弈者应追求技艺精进而非投机取巧。刻意制造棋盒爆满的闹剧,既失却围棋雅趣,更背离"胜固欣然败亦喜"的豁达境界。

思路:

先来分析题意,简单点说就是:有两个容器,轮流放物品,超过容量就输了。

现在我们就可以愉快的思考了!

因为黑方先提子,白方后,我们不难发现黑方提子的轮次号一定是奇数,白方提子的轮次号一定是偶数。那就可以用两个变量分别存各方提子数目。只要在过程中某一方的提子数量超过了 M 就直接输出获胜方,如果整个棋局结束还没有超过 M 的就说明是平局。

完整代码:

请不要抄题解!
#include<bits/stdc++.h>
using namespace std;
int n,m,a,b;
int main(){
    cin>>n>>m;
    for(int i=1,d;i<=n;i++){
        cin>>d;
        if(i%2==1)a+=d;//黑方提子
        else b+=d;//白方提子
        if(a>m){cout<<"White";return 0;}//黑方超过M,白方赢
        if(b>m){cout<<"Black";return 0;}//白方超过M,黑方赢
    }
    cout<<"Draw";//平局
}