MG是一个财富爆表的男孩子。他拥有
N(1<=N<=100000)
N(1<=N<=100000)个苹果,每个苹果上标有一个数字
0~9 ,代表它的价值。
一个合法的数字是不含有前导零的,这 n
n个苹果恰好排成了一个合法的N位数。
MG拥有拿去 K个苹果的权利(0<=K
#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
typedef pair<int,int>P;
const int MAXN=100010;
int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
string s;
int num[MAXN];
int S[3];
int main()
{
std::ios::sync_with_stdio(0);
int A,B,C,n,k,T,t;
bool flag0,flag1,E1,E2;
cin>>T;
while(T--)
{
flag0=flag1=t=0;
S[0]=S[1]=S[2]=0;
E1=E2=0;
int sum=0;
cin>>n>>k;
cin>>s;
for(int i=0; i<s.size(); i++)
{
num[i]=(s[i]-'0')%3,sum+=s[i]-'0';
S[num[i]]++;
if(!num[i]&&s[i]!='0') flag0=1;
if(s[i]=='0')flag1=1;
if(!flag0&&s[i]=='0')
t++; //记录前导零的个数
if(!flag1&&num[i]==1)
E1=1;
if(!flag1&&num[i]==2)
E2=1;
}
bool flag=0;
if(!flag0)t--;
for(C=0; C<=min(k,S[2]); C++)
{
B=(sum-C*2)%3;
while(B<=min(k,S[1])&&B+C<=k)
{
A=k-B-C;
if(A<=S[0])
if(A>=t||(E1&&B<S[1])||(E2&&C<S[2]))
{
cout<<"yes\n";
flag=1;
break;
}
B+=3;
}
if(flag)
break;
}
if(!flag)
cout<<"no\n";
}
return 0;
}