您的位置:首页 > 其它

Hdu 1016 Prime Ring Problem

2014-01-24 20:59 309 查看
import java.io.*;
import java.math.BigInteger;
import java.util.*;

public class stackingbox {
public static int[] primer_table = new int[50];
public static int[] mark = new int[22];

public static StringBuilder sb = new StringBuilder();

public static void DFS(int n, int now, int[] result, int count){
if(count==n){
if(primer_table[1+result[n-1]]==1){
for(int i=0;i<n-1;i++){
sb.append(result[i]).append(" ");
}
sb.append(result[n-1]+"\r\n");
}
return;
}
for(int i=2;i<=n;i++){
if(mark[i]==1) continue;
if(primer_table[i+now]==1){
mark[i]=1;
result[count]=i;
DFS(n, i, result, count+1);
result[count]=0;
mark[i]=0;
}
}
}
public static void main (String [] args) throws Exception {
Scanner scan = new Scanner(System.in);
for(int i=2;i<50;i++){
int flag = 1;
for(int j=2;j<=Math.sqrt(i);j++){
if(i%j==0) flag=0;
}
primer_table[i] = flag;
}
int count = 1;
while(scan.hasNextInt()){
sb = new StringBuilder();
sb.append("Case ").append(count).append(":").append("\r\n");
int n = scan.nextInt();
Arrays.fill(mark, 0);
mark[1] = 1;
int[] result = new int[22];
result[0] = 1;
DFS(n, 1, result, 1);
count++;
sb.append("\r\n");
System.out.print(sb.toString());
//System.out.println();
}
}
}

不是什么难题 但是有点坑到我了。

发一下记住一些教训。。

1.这个输出太多,我用system.out输出妥妥TLE, 结果害我想了2钟头怎么优化剪枝。。艹

好吧我是傻叉,java写了这么多年,我知道输入多会出问题,没碰过输出多也TLE的。哎

2.然后PE到死又调了一个钟头,行尾空格,空白行都查过了。

哪知道这里用system.out.println 又或者\n 都会PE, 非得\r\n才能过,几个意思啊

还是赶快转C算了,搞出这么多事,C的printf("\n")就不出出错

3.最后吐槽hdu貌似只算第一次提交的速度。我最快的一次俨然超过了java的统计最快但是没上榜=。=



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: