usaco 4.3.4 Letter Game
2014-05-21 10:43
309 查看
/* ID: daniel.20 LANG: JAVA TASK: lgame */ import java.util.*; import java.io.*; import java.math.BigInteger; class word implements Comparable<word>{ String s; int value; public word(String x, int a){ s=x;value=a; } @Override public int compareTo(word t) { return this.s.compareTo(t.s); } } class problem2{ StringBuilder sb = new StringBuilder(); long start = System.currentTimeMillis(); int value_table[] = {2, 5, 4, 4, 1, 6, 5, 5, 1, 7, 6, 3, 5, 2, 3, 5, 7, 2, 1, 2, 4, 6, 6, 7, 5, 7}; int sample[] = new int[26]; ArrayList<word> all_string = new ArrayList<word>(); ArrayList<word> length_of_3 = new ArrayList<word>(); ArrayList<word> length_of_4 = new ArrayList<word>(); int max = -1; void solver() throws IOException{ BufferedReader reader = new BufferedReader(new FileReader("lgame.in")); String x = reader.readLine(); for(int i=0;i<x.length();i++){ sample[x.charAt(i)-'a']++; } BufferedReader reader1 = new BufferedReader(new FileReader("lgame.dict")); while(true){ String tmp = reader1.readLine(); if(tmp.length()<3) break; int sum=0; boolean flag = true; int tmp_arr[] = new int[26]; for(int i=0;i<tmp.length();i++){ int ttt = tmp.charAt(i)-'a'; sum+=value_table[ttt]; tmp_arr[ttt]++; if(tmp_arr[ttt]>sample[ttt]){ flag=false; break; } } word d = new word(tmp, sum); if(flag){ max = sum>max?sum:max; if(tmp.length()==3){ length_of_3.add(d); }else if(tmp.length()==4){ length_of_4.add(d); } all_string.add(d); } } HashMap<String, Integer> map = new HashMap<String, Integer>(); for(int i=0;i<length_of_3.size();i++){ word s1 = length_of_3.get(i); for(int j=0;j<length_of_3.size();j++){ word s2 = length_of_3.get(j); int tmp_arr[] = new int[26]; boolean flag = true; int sum = 0; for(int k=0;k<3;k++){ int ttt1 = s1.s.charAt(k)-'a'; int ttt2 = s2.s.charAt(k)-'a'; tmp_arr[ttt1]++; tmp_arr[ttt2]++; if(tmp_arr[ttt1]>sample[ttt1]||tmp_arr[ttt2]>sample[ttt2]){ flag = false; break; } sum+=value_table[ttt1];; sum+=value_table[ttt2]; } if(flag){ max = sum>max?sum:max; String ns = s1.s.compareTo(s2.s)<=0?s1.s+" "+s2.s:s2.s+" "+s1.s; if(!map.containsKey(ns)){ map.put(ns, 1); word d = new word(ns, sum); all_string.add(d); } } } for(int j=0;j<length_of_4.size();j++){ word s2 = length_of_4.get(j); int tmp_arr[] = new int[26]; boolean flag = true; int sum = 0; for(int k=0;k<3;k++){ int ttt1 = s1.s.charAt(k)-'a'; int ttt2 = s2.s.charAt(k)-'a'; tmp_arr[ttt1]++; tmp_arr[ttt2]++; if(tmp_arr[ttt1]>sample[ttt1]||tmp_arr[ttt2]>sample[ttt2]){ flag = false; break; } sum+=value_table[ttt1]; sum+=value_table[ttt2]; } int temp = s2.s.charAt(3)-'a'; tmp_arr[temp]++; if(tmp_arr[temp]>sample[temp]) flag = false; sum+=value_table[temp]; if(flag){ max = sum>max?sum:max; String ns = s1.s.compareTo(s2.s)<=0?s1.s+" "+s2.s:s2.s+" "+s1.s; if(!map.containsKey(ns)){ map.put(ns, 1); word d = new word(ns, sum); all_string.add(d); } } } } sb.append(max).append("\n"); ArrayList<word> result = new ArrayList<word>(); for(int i=0;i<all_string.size();i++){ if(all_string.get(i).value==max){ result.add(all_string.get(i)); } } Collections.sort(result); for(int i=0;i<result.size();i++){ sb.append(result.get(i).s).append("\n"); } PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("lgame.out"))); System.out.print(sb.toString()); pw.print(sb.toString()); pw.close(); System.out.println("$:"+(System.currentTimeMillis()-start)); System.exit(0); } } public class lgame { public static void main(String[] args) throws Exception { problem2 p = new problem2(); p.solver(); } }
前面那个求割点的图论不会做,图论基本没研究过,伤。。
然后看这个题貌似蛮好搞。 开始以为是DP, 但是DP复杂度貌似还是高了。
注意到给出的词最多只有7的长度,所以只有可能有3+3, 3+4这样的组合
然后就是把输入的长度为3和为4的组合枚举一遍, 并且算上之前的所有的单个词汇。
枚举所有求最大。
USACO这个难度差距有点太大, 前面一些迭代加深之类的搜索过难, 这个有点太无脑了吧, 难得一次过。。。
相关文章推荐
- usaco 4.3.4 letter game
- usaco training 4.3.4 Letter Game 题解
- USACO 4.3.4 Letter Game 字母游戏 题解与分析
- [USACO4.3.4 Letter Game]
- USACO Section 4.3 Letter Game
- usaco-4.3.4-lgame
- usaco 4.3.4 Street Race
- [USACO4.3.3]Letter Game
- USACO-Section 4.3 Letter Game (枚举)
- USACO4.3.3 Letter Game (lgame)
- C++——【USACO 4.3.3】——Letter Game
- usaco 4.3 Letter Game 搜索
- USACO 4.3 Letter Game(DFS)
- USACO Section 4.3 Letter Game - 简单枚举
- usaco 4.3 Letter Game 2010.8.8
- USACO 4.3 Letter Game (字典树)
- usaco 4.3 Letter Game 搜索
- USACO 4.3 Letter game
- USACO 4.3 Letter Game
- USACO4.3.3 Letter Game (lgame)