import java.util.Scanner; public class ALGO_180 { private static boolean t=true; private static int min=100; private static String l=""; public static void main(String[] args) { // TODO 自动生成的方法存根 int N; Scanner as=new Scanner(System.in); N=as.nextInt(); as.close(); int[] g=new int[100000]; int[] e=new int[100000]; String[] f=new String[100000]; g[0]=1; f[0]="impossible"; int i=0,d=1,s=1,w=2,dx=1,sx=1,wx=4; while(N>dx&&N>sx&&N>wx){ i++; d++; dx=dx+(d)*(d); s=s+2; sx=sx+s*s; w=w+2; wx=wx+w*w; if(dx>sx&&wx>sx){ g[i]=sx; f[i]=s+"L"; dx=dx-(d)*(d); d--; wx=wx-w*w; w=w-2; }else if (sx>dx&&wx>dx) { g[i]=dx; f[i]=d+"H"; sx=sx-s*s; s=s-2; wx=wx-w*w; w=w-2; }else if (dx>wx&&sx>wx) { g[i]=wx; f[i]=w+"L"; sx=sx-s*s; s=s-2; dx=dx-(d)*(d); d--; }else if(sx==dx&&sx<wx) { g[i]=sx; f[i]=s+"L"; i++; g[i]=dx; f[i]=d+"H"; wx=wx-w*w; w=w-2; }else if(sx==wx&&sx<dx) { g[i]=sx; f[i]=s+"L"; i++; g[i]=wx; f[i]=w+"L"; dx=dx-(d)*(d); d--; }else if(wx==dx&&wx<sx) { g[i]=wx; f[i]=w+"L"; i++; g[i]=dx; f[i]=d+"H"; wx=wx-w*w; w=w-2; }else if(wx==dx&&wx==sx) { g[i]=wx; f[i]=w+"L"; i++; g[i]=dx; f[i]=d+"H"; i++; g[i]=wx; f[i]=w+"L"; } } boolean p=true; while(N<g[i]){ i--; } f(g,f,i+1,N,e,0); if(t==false){ p=false; } if(p){ System.out.println("impossible"); } System.out.println(l); // f(g,f,i,N,e,0); } private static void f(int[] g, String[] f, int i, int n, int[] e, int j) { // TODO 自动生成的方法存根 if(j<2){ for(int z=i;z>i/2;z--){ e[j]=z; if(n-g[z]==0){ if(j<min){ l=""; min=j; for(int w=0;w<=j;w++){ l=l+f[e[w]]+" "; } } t=false; } f(g,f,z-1,n-g[z],e,j+1); } }else { for(int z=i;z>0;z--){ e[j]=z; if(n-g[z]==0){ if(j<min){ l=""; min=j; for(int w=0;w<=j;w++){ l=l+f[e[w]]+" "; } } t=false; } f(g,f,z-1,n-g[z],e,j+1); } } } }由于比赛将近该题的难度颇高,且该题没有正确参考代码,估计本人的代码应该是最高得分。故先将这个代码分享下。待比赛结束再做修改和解释。有兴趣的可以关注下!
蓝桥杯 VIP 算法训练 Pyramids (55分)Java程序代码
猜你喜欢
转载自blog.csdn.net/lslanding/article/details/79586971
今日推荐
周排行