题目链接
简介:对一些数字,余念安可以反转一个数字,齐夏将两个数字首尾相连变为一个数字。每个人都采取最优策略。
名单上只剩下一个号码。如果该整数不小于 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;
}
标签:10,1931E,数字,int,sum,codeforces,while,cnt
From: https://www.cnblogs.com/eehaofu/p/18078787