码迷,mamicode.com
首页 > 其他好文 > 详细

poj 1171 Letter Game 字符串处理

时间:2015-05-20 14:50:27      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:poj   算法   

#include <iostream>
using namespace std;
char s[16];
int cnt[256];
int tot[256];
int m[256];
struct DICT
{
	char words[10];
	int len,val;
}dic[40010];

int tovalue(char ch[])
{
	int sum=0;
	for(int i=0;ch[i]!='\0';++i)
		sum+=m[ch[i]];
	return sum;
}

int add(int list[],char ch[])
{
	for(int i=0;ch[i]!='\0';++i){
		++list[ch[i]];
		if(list[ch[i]]>tot[ch[i]])
			return false;		
	}	
	return true;
}

int main()
{
	m['q']=7;m['w']=6;m['e']=1;m['r']=2;m['t']=2;m['y']=5;m['u']=4;m['i']=1;m['o']=3;m['p']=5;
	m['a']=2;m['s']=1;m['d']=4;m['f']=6;m['g']=5;m['h']=5;m['j']=7;m['k']=6;m['l']=3;
	m['z']=7;m['x']=7;m['c']=4;m['v']=6;m['b']=5;m['n']=2;m['m']=5;
	int ans=0;
	scanf("%s",s);
	for(int i='a';i<='z';++i)
		tot[i]=0;
	for(int i=0;s[i]!='\0';++i)
		++tot[s[i]];
	int s_len=strlen(s);
	int dic_index=0;
	while(scanf("%s",s)==1&&s[0]!='.'){
		for(int i='a';i<='z';++i)
			cnt[i]=0;
		int v=tovalue(s);
		int len=strlen(s);
		if(add(cnt,s)==1)
			ans=max(ans,v);
		if((s_len==6&&len==3)||(s_len==7&&len<=4)){
			strcpy(dic[dic_index].words,s);
			dic[dic_index].len=len;
			dic[dic_index].val=v;
			++dic_index;
		}
	}
	if(s_len>=6){
		for(int i=0;i<dic_index;++i)
			for(int j=i+1;j<dic_index;++j){
				for(int k='a';k<='z';++k)
					cnt[k]=0;
				if(!add(cnt,dic[i].words))
			 		continue;
	 			if(!add(cnt,dic[j].words))
	 				continue;
 				ans=max(ans,dic[i].val+dic[j].val);
			}
				
	}		
	printf("%d",ans);
	return 0;	
} 

poj 1171 Letter Game 字符串处理

标签:poj   算法   

原文地址:http://blog.csdn.net/sepnine/article/details/45869921

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!