CF1931E Anna and the Valentine's Day Gift
思路
容易发现,如果位数不能减少,那么无论两人如何操作,是不会改变最终结果的,所以当总位数大于
首先发现,对于不是十的倍数的数,无论 Anna 如何操作,位数是不会改变的,但是如果是十的倍数,我们假设
所以如果是 Anna 操作,那么她一定会选择末尾连续零个数最多的数。
再思考 Sasha 会如何操作,如果她将一个末尾有零的数放在某个数的前面,那么这些零就无法变成前导零从而减少位数了,所以 Sasha 也会选择一个末尾连续零个数最多的数。
所以我们只需要提前统计好总位数
然后排个序,从大到小,将
最后看
AC code
#include<bits/stdc++.h>
using namespace std;
int T,n,m,a,zero[200005],res,ff;
inline void sol()
{
scanf("%d%d",&n,&m),res=0;
for(int i=1;i<=n;++i)
{
scanf("%d",&a),ff=1;
while(a)
{
if(a%10==0) zero[i]+=ff;
else ff=0;
++res,a/=10;
}
}
sort(zero+1,zero+n+1),reverse(zero+1,zero+n+1);
for(int i=1;i<=n;++i) res-=(i&1)*zero[i],zero[i]=0;
puts((res<=m)?"Anna":"Sasha");
}
int main()
{
scanf("%d",&T);
while(T--) sol();
return 0;
}