签到,看半天看懂干垃圾湿垃圾==
1 #include<bits/stdc++.h> 2 using namespace std; 3 int A[26]; 4 int B[26]; 5 int C[3]; 6 int main() 7 { 8 string s; 9 int t; 10 scanf("%d",&t); 11 for(int i=1;i<=t;i++){ 12 cout<<"Case #"<<i<<": "; 13 cin>>s; 14 memset(B,0,sizeof B); 15 int n=s.length(); 16 for(int i=0;i<n;i++){ 17 B[s[i]-'a']++; 18 } 19 cin>>s; 20 21 for(int i=0;i<26;i++){ 22 if(s[i]=='h')A[i]=1; 23 else if(s[i]=='d')A[i]=2; 24 else A[i]=3; 25 } 26 C[0]=C[1]=C[2]=0; 27 for(int i=0;i<26;i++){ 28 if(A[i]==1){ 29 C[0]+=B[i]; 30 }else if(A[i]==2){ 31 C[1]+=B[i]; 32 }else{ 33 C[2]+=B[i]; 34 } 35 } 36 if(C[0]*1.0/n>=0.25)puts("Harmful"); 37 else if(C[0]*1.0/n<=0.1)puts("Recyclable"); 38 else if(C[1]>=2*C[2])puts("Dry"); 39 else puts("Wet"); 40 } 41 }
细节:
要求字符串最短且字母序最小
双冒号加在不同位置贡献是不一样的==
1 #include<bits/stdc++.h> 2 using namespace std; 3 stack<char> st; 4 vector<char> v; 5 vector<int>ans; 6 char B[10][100]; 7 char A[10][8]; 8 void deal(string s) 9 { 10 ans.clear(); 11 memset(A,0,sizeof A); 12 v.clear(); 13 int n=s.length(); 14 int j,t; 15 for(int i=n-1; i>=0;) 16 { 17 if(i-3>=0) 18 { 19 j=i-3; 20 } 21 else j=0; 22 t=0; 23 for(j; j<=i; j++) 24 { 25 t=t*2+s[j]-'0'; 26 } 27 i-=4; 28 29 if(t<10) 30 { 31 st.push(char(t+'0')); 32 } 33 else 34 { 35 t=t-10+'a'; 36 st.push(char(t)); 37 38 } 39 } 40 while(!st.empty()) 41 { 42 v.push_back(st.top()); 43 //cout<<st.top(); 44 st.pop(); 45 } 46 //cout<<' '; 47 int _n=v.size(); 48 bool f=0; 49 bool g=0,h=0; 50 int _x,_y=0; 51 for(int i=0; i<_n;) 52 { 53 f=0; 54 _x=0; 55 for(int j=0; j<4; j++) 56 { 57 if(!f&&v[i]=='0'&&j<3) 58 { 59 i++; 60 } 61 else if(!f&&v[i]=='0'&&j==3) 62 { 63 A[_y][_x++]='0'; 64 i++; 65 } 66 else 67 { 68 f=1; 69 70 A[_y][_x++]=v[i]; 71 i++; 72 } 73 74 } 75 A[_y][_x]='