ceil细胞合并 每一秒一个细胞只能合并一次 求达到不可合并状态所需的秒数
2017-01-17 16:37
453 查看
package work;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Aceil {
static int data[];
static boolean used[];
static int minsec;
public static void main(String[] args) throws FileNotFoundException {
/* Scanner sc=new Scanner(System.in); */
Scanner sc = new Scanner(new File("src/ceil"));
int T = sc.nextInt();
for (int t = 0; t < T; t++) {
int N = sc.nextInt();
data = new int[257];
used = new boolean[257];
for (int n = 0; n < N; n++) {
data[sc.nextInt()]++;
}
dfs(0);
//
for (int i = 1; i < 257; i++) {
if (data[i] != 0) {
System.out.print(i +":"+data[i] +" ");
}
}
System.out.println();
//
System.out.println(minsec);
}
}
private static void dfs(int sec) {
minsec=sec;
if (check()) {
return;
}
for (int i = 128; i >= 1; i--) {
if (data[i] > 1) {
data[2 * i] += data[i] / 2;
if (data[i] % 2 == 0) {data[i] = 0;}
else {data[i] = 1;}
}
}
dfs(sec+1);
}
private static boolean check() {
boolean temp=true;
for (int i = 0; i < data.length; i++) {
if (data[i] > 1) {
temp=false;
break;
}
}
return temp;
}
}
、、input
1
6
1 2 4 2 1 16
、、output
2:1 8:1 16:1
2
package work;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Aceil {
static int data[];
static boolean used[];
static int minsec;
public static void main(String[] args) throws FileNotFoundException {
/* Scanner sc=new Scanner(System.in); */
Scanner sc = new Scanner(new File("src/ceil"));
int T = sc.nextInt();
for (int t = 0; t < T; t++) {
int N = sc.nextInt();
data = new int[257];
used = new boolean[257];
for (int n = 0; n < N; n++) {
data[sc.nextInt()]++;
}
dfs(0);
//
for (int i = 1; i < 257; i++) {
if (data[i] != 0) {
System.out.print(i +":"+data[i] +" ");
}
}
System.out.println();
//
System.out.println(minsec);
}
}
private static void dfs(int sec) {
minsec=sec;
if (check()) {
return;
}
for (int i = 128; i >= 1; i--) {
if (data[i] > 1) {
data[2 * i] += data[i] / 2;
if (data[i] % 2 == 0) {data[i] = 0;}
else {data[i] = 1;}
}
}
dfs(sec+1);
}
private static boolean check() {
boolean temp=true;
for (int i = 0; i < data.length; i++) {
if (data[i] > 1) {
temp=false;
break;
}
}
return temp;
}
}
、、input
1
6
1 2 4 2 1 16
、、output
2:1 8:1 16:1
2
相关文章推荐
- 用C#实现一个类,要求该类只能被实例化一次
- c# 程序只能运行一次(多次运行只能打开同一个程序)
- 基本有序,一次只能确定一个
- params 数组参数的解读 为什么:对于 params 只能在一个参数列表中使用一次 并且要放到最后
- C#如何让同一个窗口只能打开一次和一个程序只能同时打开一个
- 一个程序只能启动一次实现
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- 一个用户在同一时间只能登录一次
- VC++ 一次只能运行一个程序设置
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- 一次只能打开一个窗口
- 一次只能打开一个窗口
- .NET限制程序一次只能运行一个实例
- spring-security 一个用户只能登陆一次
- 一个用户只能在一部机里登陆一次
- C#应用程序只能打开一次,应用程序只能打开一个,应用程序不能重复打开
- 一个线程只能被启动一次
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.