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

usaco Letter Game

时间:2015-10-02 22:28:31      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

先计算出每个单词的值,如果单词不合法则为-1,同时找出最大的单词。

然后输出。

/*
ID: modengd1
PROG: lgame
LANG: C++
*/
#include <iostream>
#include <stdio.h>
#include <memory.h>
#include <string>
#include <cstring>
#include <vector>
using namespace std;
int value[257];
int f[256];
bool useful[256];
bool legal[40000];
int valueofworde[40000];
int cal(string S,string S2)//次单词是否合法,不合法返回-1,合法返回这个词的值
{
    int counter[256];
    memset(counter,0,sizeof(counter));
    int ret=0;
    for(int i=0;i<S.size();i++)
    {
        counter[S[i]]++;
        if(!useful[S[i]]||counter[S[i]]>f[S[i]])
            return -1;
        ret+=value[S[i]];
    }
    for(int i=0;i<S2.size();i++)
    {
        counter[S2[i]]++;
        if(!useful[S2[i]]||counter[S2[i]]>f[S2[i]])
            return -1;
        ret+=value[S2[i]];
    }
    return ret;
}
void init()
{
    value[‘q‘]=value[‘j‘]=value[‘x‘]=value[‘z‘]=7;
    value[‘w‘]=value[‘f‘]=value[‘k‘]=value[‘v‘]=6;
    value[‘e‘]=value[‘s‘]=value[‘i‘]=1;
    value[‘r‘]=value[‘t‘]=value[‘a‘]=value[‘n‘]=2;
    value[‘o‘]=value[‘l‘]=3;
    value[‘u‘]=value[‘d‘]=value[‘c‘]=4;
    value[‘p‘]=value[‘g‘]=value[‘b‘]=value[‘m‘]=value[‘y‘]=value[‘h‘]=5;
}
int main()
{
    freopen("lgame.in","r",stdin);
    freopen("lgame.out","w",stdout);
    init();
    vector<string> dict;
    char ch;
    int maxvalue=0;
    char temp[10];
    FILE *in2 = fopen ("lgame.dict", "r");
    vector<int> index[43];//单词值为i的单词在字典中的位置
    memset(useful,false,sizeof(useful));
    memset(f,0,sizeof(f));
    while(~scanf("%c",&ch))
    {
        useful[ch]=true;
        f[ch]++;
    }
    for(int i =0;~fscanf(in2,"%s",temp);i++)
    {
        if(temp[0]==‘.‘)
            break;
        dict.push_back(temp);
        valueofworde[i]=cal(temp,"");
        if(valueofworde[i]!=-1)
            index[valueofworde[i]].push_back(i);
        maxvalue=max(maxvalue,valueofworde[i]);
    }
    for(int i=1;i<=42;i++)
    {
        for(int j=0;j<index[i].size();j++)
        {
            for(int k=0;k<=42;k++)
            {
                for(int m=0;m<index[k].size();m++)
                {
                    maxvalue=max(maxvalue,cal(dict[index[i][j]],dict[index[k][m]]));
                }
            }
        }
    }
    cout<<maxvalue<<endl;
    for(int i=0;i<dict.size();i++)
    {
        if(valueofworde[i]==maxvalue)
            cout<<dict[i]<<endl;
        else
        {
            int other=maxvalue-valueofworde[i];
            for(int j=0;j<index[other].size();j++)
            {
                if(index[other][j]>=i&&cal(dict[index[other][j]],dict[i])==maxvalue)
                {
                    cout<<dict[i]<<‘ ‘<<dict[index[other][j]]<<endl;
                }
            }
        }
    }
    return 0;
}

  

usaco Letter Game

标签:

原文地址:http://www.cnblogs.com/modengdubai/p/4852740.html

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