Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Huge input,scanf is recommended.In Reply To:帮我看看啊,为什么超时 Posted by:specious at 2005-09-24 20:05:02 > #include<iostream> > #include<string> > using namespace std; > int val(string t)//计算分数 > { > int count=0; > for(int i=0;i<t.length ();i++) > { > switch(t.at(i)) > { > case'a':count+=2;break; > case'b':count+=5;break; > case'c':count+=4;break; > case'd':count+=4;break; > case'e':count+=1;break; > case'f':count+=6;break; > case'g':count+=5;break; > case'h':count+=5;break; > case'i':count+=1;break; > case'j':count+=7;break; > case'k':count+=6;break; > case'l':count+=3;break; > case'm':count+=5;break; > case'n':count+=2;break; > case'o':count+=3;break; > case'p':count+=5;break; > case'q':count+=7;break; > case'r':count+=2;break; > case's':count+=1;break; > case't':count+=2;break; > case'u':count+=4;break; > case'v':count+=6;break; > case'w':count+=6;break; > case'x':count+=7;break; > case'y':count+=5;break; > case'z':count+=7;break; > } > } > return count; > } > > bool isright(int *num,string b)//判断是否有多余字母 > { > int co[26]={0}; > for(int i=0;i<b.length();i++) > { > int n=b.at(i)-97; > co[n]++; > if(co[n]>num[n]) > return false; > } > return true; > } > > > > int main() > { > string a[40000];//保存字符串 > string x;//保存原字符串 > cin>>x; > int num[26]={0}; > int value[40000];//保存每个字符串的分数 > int len[40000]; > int mm=val(x);//保存原字符串的分数 > for(int i=0;i<x.length();i++) > { > num[int(x.at(i))-97]++; > } > int z=0; > int max=0; > for(i=0;i<40000;i++) > { > cin>>a[i]; > if(a[i].at(0)=='.') break; > if(z==-1)continue; > len[i]=a[i].length (); > if(len[i]>7) continue; > if(z==0&&isright(num,a[i])) > { > value[i]=val(a[i]); > if(value[i]==mm) > { > z=-1; > } > } > } > // if(z==-1) > // { > // cout<<mm<<endl; > // return 0; > // } > > for(int j=0;j<i;j++) > { > if(value[i]<0) continue; > if(value[j]>max) > max=value[j]; > if(len[j]==7) continue; > for(int k=j+1;k<i;k++) > { > if(len[k]==7) continue; > if(len[j]+len[k]>7) continue; > string y=a[j]+a[k]; > if(isright(num,y)&&value[j]+value[k]>max) max=val(y); > if(max==mm) > { > cout<<mm<<endl; > return 0; > } > } > } > > cout<<max<<endl; > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator