题目链接
简介:对一些数字,余念安可以反转一个数字,齐夏将两个数字首尾相连变为一个数字。每个人都采取最优策略。
名单上只剩下一个号码。如果该整数不小于  10的m次方 ,则齐夏获胜。否则余念安就赢了。

分析 :博弈论问题,结局已经确定,可知 变成了位数个数之争,齐夏要通过合并数字使得位数个数不会减小,余念安要通过反转数字(得到前导零)减小位数个数。

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int qu(ll x)

{

    int cnt=0;

    while(x)

    {

        x/=10;

        cnt++;

    }

    return cnt;

}

vector<int>a;

void du(ll x)

{

    int cnt=0;

    while(x%10==0)

    {cnt++;x/=10;}

    a.push_back(cnt);

}

int n,m;

void solve()

{

    a.clear();

   cin>>n>>m;

   int sum=0;

   for(int i=0;i<n;i++) {

    ll d; cin>>d;

    sum+=qu(d);

    du(d);

   }

   sort(a.begin(),a.end());

   int k=0;

   for(int i=n-1;i>=0;i--)

   {

    if(k==0)

    sum-=a[i],k=1;

    else

    if(k) k=0;

   }

   if(sum>m) cout<<"Sasha"<<"\n";

   else cout<<"Anna"<<"\n";

}

int main()

{

    int t;cin>>t;

    while(t--)

    {

        solve();

    }

    return 0;

}
posted on 2024-03-17 17:04  嗯嗯好傅  阅读(47)  评论(0)    收藏  举报