hihocoder 134周题目

第一次把题目做出来了,但是提交了是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;
	}
}
结果自己验证了都没问题,唉,心累。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值