第一次把题目做出来了,但是提交了是WA,感觉是没有错的,心态崩了,不过还是纪念一下。
题目:
hihoCoder新春晚会正在紧张地筹备中。晚会分为上半场和下半场,总导演小Hi现在要为N个节目安排演出时间(上半场或下半场)。为了描述方便,我们将第i个节目对应两个编号2i-1和2i,分别表示把第i个节目安排在上半场和下半场。
由于演员、道具和布景的限制。有些安排之间存在冲突,比如编号1的安排和编号4的安排有冲突,意味着"把第1个节目安排在上半场"同"把第2个节目安排在下半场"有冲突。
现在小Hi手里有M对编号,表示冲突的节目安排。他的任务是帮助主办方安排出节目演出的合理时间。
输入
第一行包含两个非负整数n和m(n≤8000,m≤20000),代表有n个节目和m对冲突。
接下来m行每行两个数x和y,表示编号x和编号y冲突。
输出
输出n行,每行一个数,从小到大输出最后进行演出的编号。若有多解,则输出字典序最小的。无解则输出NIE。
3 2 1 3 2 4
1 4 5代码:
import java.io.*;
import java.util.*;
public class demo{
public static void main(String args[]) {
int n = 0;
int m = 0;
Scanner scan = new Scanner(System.in);
n = scan.nextInt();
m = scan.nextInt();
scan.nextLine();
int[][] arr = new int[m][2];
int[] a = new int[n];
for(int i = 0; i < m; i ++) {
arr[i][0] = scan.nextInt();
arr[i][1] = scan.nextInt();
scan.nextLine();
}
for(int j = 0; j < n; j ++) {
a[j] = 2 * j + 1;
if(check(a, arr, j)) {continue;}
else {
a[j] = 2 * j + 2;
if(check(a, arr, j)) {continue;}
else{
System.out.print("NIE");
break;
}
}
}
if(a[n - 1] != 0) {
for(int k = 0; k < n - 1; k ++) {
System.out.println(a[k]);
}
System.out.print(a[n-1]);
}
}
public static boolean check(int[] a,int[][] b, int c) {
if(c > 0) {
for(int j = 0; j < b.length; j ++) {
if(a[c] == b[j][1]){
for(int i = 0; i < c; i ++) {
if(a[i] == b[j][0]) {return false;}
}
}
}
}
return true;
}
}
结果自己验证了都没问题,唉,心累。。。