HDU6020---MG loves apple(枚举)

【HDU6020---MG loves apple(枚举)】赋料扬雄敌,诗看子建亲。这篇文章主要讲述HDU6020---MG loves apple(枚举)相关的知识,希望能为你提供帮助。
题目链接
 
Problem Description MG is a rich boy. He has  n  apples, each has a value of V(0< =V< =9). 
A valid number does not contain a leading zero, and these apples have just made a valid  N  digit number. 
MG has the right to take away  K  apples in the sequence, he wonders if there exists a solution: After exactly taking away  K  apples, the valid  N?K  digit number of remaining apples mod  3  is zero. 
MG thought it very easy and he had himself disdained to take the job. As a bystander, could you please help settle the problem and calculate the answer?   Input The first line is an integer  T  which indicates the case number.(1< =T< =60)
And as for each case, there are  2  integer  N(1< =N< =100000),K(0< =K< N)  in the first line which indicate apple-number, and the number of apple you should take away.
MG also promises the sum of  N  will not exceed  1000000。
Then there are  N  integers  X  in the next line, the i-th integer means the i-th gold’s value(0< =X< =9).   Output As for each case, you need to output a single line.
If the solution exists, print”yes”,else print “no”.(Excluding quotation marks)   Sample Input25 2112304 21000   Sample Outputyes no   题意:

HDU6020---MG loves apple(枚举)

文章图片

 
思路:
HDU6020---MG loves apple(枚举)

文章图片

 
代码如下:
#include < iostream> #include < algorithm> #include < cstring> #include < cstdio> using namespace std; inta[100005]; char s[100005]; void cal(int & a3, int & E1,int & E2,int N) { a3=0; E1=0; E2=0; for(int i=1; i< =N; i++) { if(a[i]==3) break; if(a[i]==0) a3++; } for(int i=1; i< =N; i++) { if(a[i]==0) break; if(a[i]==1) E1=1; if(a[i]==2) E2=1; } return ; }int main() { int T; cin> > T; while(T--) { int N,K; int s1=0,s2=0,s3=0; scanf("%d%d",& N,& K); scanf("%s",s+1); for(int i=1; i< =N; i++) { a[i]=s[i]-\'0\'; if(a[i]%3==1) a[i]=1,s1++; else if(a[i]%3==2) a[i]=2,s2++; else s3++,a[i]=(a[i])?3:0; } int ans=(s1+s2*2)%3; int a3,E1,E2,f=0; cal(a3,E1,E2,N); for(int C=0; C< =s2& & C< =K; C++)///C-> 2; B-> 1; A-> 0; { int B=((ans-C*2)%3+3)%3; for(; B< =s1& & C+B< =K; B=B+3) { int A=K-C-B; if(A< =s3) { if(A> a3) f=1; else if(B< s1& & E1) f=1; else if(C< s2& & E2) f=1; if(f) break; } } if(f) break; } if((N==K+1)& & s3) f=1; if(f) puts("yes"); else puts("no"); } return 0; }

 
 

    推荐阅读