POJ 1248
2012-09-01 08:51
239 查看
有很多这样的题,给一个这样的集合,让你去找几个数使他们加起来满足什么条件,一般要找4~6个数什么的,直接做就会超时,可以折半找2~3个数并将它们结果存起来,再另找2~3个数去验证。
这样讲n^4~n^6就变成了n^2~n^3(用hash的话)
View Code
这样讲n^4~n^6就变成了n^2~n^3(用hash的话)
View Code
import java.util.*; import java.math.*; class Main { static int pow(int a,int n) { int ans=1; while(n>0) { ans*=a; n--; } return ans; } public static void main(String arg[]) { Scanner cin=new Scanner(System.in); int target,len; while(true) { char s[]; target=cin.nextInt(); s=cin.next().toCharArray(); if(target==0&&s[0]=='E'&&s[1]=='N'&&s[2]=='D') break; len=s.length; Arrays.sort(s); HashMap<Integer,String> hash=new HashMap<Integer,String>(); hash.clear(); for(int i=len-1;i>=0;i--) { for(int j=len-1;j>=0;j--) { if(i==j) continue; for(int k=len-1;k>=0;k--) { if(i==k||j==k) continue; int tp=-pow(s[i]-'A'+1,3)+pow(s[j]-'A'+1,4)-pow(s[k]-'A'+1,5)+target; if(hash.containsKey(tp)) continue; String ss=String.valueOf(s[i])+String.valueOf(s[j])+String.valueOf(s[k]); hash.put(tp, ss); //System.out.println("<"+tp+","+ss+">"); } } } boolean flag=false; String ans = null; for(int i=len-1;i>=0;i--) { for(int j=len-1;j>=0;j--) { if(i==j) continue; int t=s[i]-'A'+1-pow(s[j]-'A'+1,2); if(hash.containsKey(t)) { String tp=hash.get(t); char ss[]=tp.toCharArray(); int k; for(k=0;k<3;k++) { if(ss[k]==s[i]||ss[k]==s[j]) { break; } } if(k==3) { flag=true; ans=String.valueOf(s[i])+String.valueOf(s[j])+tp; break; } } } if(flag) break; } if(flag) System.out.println(ans); else System.out.println("no solution"); } } }
相关文章推荐
- POJ-1248
- POJ 1474 ZOJ 1248 HDU 1469 Video Surveillance 半平面交
- POJ 1248 Safecracker
- POJ 1248 - Safecracker
- poj 1248 Safecracker
- POJ-1248
- POJ 1248 Safecracker
- poj 1248 Safecracker
- zoj 1248 || poj 1474 Video Surveillance(判断多边形是否存在核)
- poj 1248
- poj1248深度搜索简单题
- poj 1248 (水)
- POJ 1248 Safecracker 水题
- 【最短路】变形-- nyoj 1248 海岛争霸、poj 1797 Heavy Transportation
- POJ1248 Safecracker
- poj 1248 Primitive Roots
- POJ 3461和COJ 1248 KMP算法
- POJ1248解题报告
- POJ 1248 Safecracker(我的水题之路——五重循环暴力- -!)
- POJ 1248 Safecracker 模拟+排序