java P1496 火烧赤壁

题目描述
曹操平定北方以后,公元 208 年,率领大军南下,进攻刘表。他的人马还没有到荆州,刘表已经病死。他的儿子刘琮听到曹军声势浩大,吓破了胆,先派人求降了。

孙权任命周瑜为都督,拨给他三万水军,叫他同刘备协力抵抗曹操。

隆冬的十一月,天气突然回暖,刮起了东南风。

没想到东吴船队离开北岸大约二里距离,前面十条大船突然同时起火。火借风势,风助火威。十条火船,好比十条火龙一样,闯进曹军水寨。那里的船舰,都挤在一起,又躲不开,很快地都烧起来。一眨眼工夫,已经烧成一片火海。

曹操气急败坏的把你找来,要你钻入火海把连环线上着火的船只的长度统计出来!

输入格式
第一行一个整数 N。

以后 N 行,每行两个数:Ai,Bi

,表示连环线上着火船只的起始位置和终点。

输出格式
输出着火船只的总长度。保证答案在 32 位带符号整数的表示范围内。

输入输出样例

输入 #1

3
-1 1
5 11
2 9

输出 #1

11

import java.util.*;

public class Main {

	public static void main(String[] args) {

		new Main().sf();
	}

	int n = 0;
	long[] a = new long[20005];
	long x = 0, y = 0, z = 0, t = 0;
	List<Student> students = new ArrayList<Student>();
	
	public void sf() {

		Scanner in = new Scanner(System.in);
		
		n = in.nextInt();
		
		for (int i = 1; i <= n; i++) {
			students.add(new Student(in.nextInt(), in.nextInt()));
			
		}
		
		Collections.sort(students);
		int qi = students.get(0).q;
		int zh = students.get(0).z;

		
		for (int i = 1; i < n; i++) {
			if (students.get(i).q > zh) {
				t +=  zh - qi;
				qi = students.get(i).q;
				zh = students.get(i).z;
			} else {
				zh = Math.max(zh, students.get(i).z);
			}
		} 
		
		/*  这个也可以
		for (Student ss : students) {
			if (ss.q > zh) {
				t += zh - qi;
				qi  = ss.q;
				zh = ss.z;
			} else {
				zh = Math.max(zh, ss.z);
			}
		} 
		*/

		System.out.println(t + zh - qi);
	}
}
	
	class Student implements Comparable<Student>{
		int q = 0;
		int z = 0;
		
		public Student(int q, int z) {
			// TODO Auto-generated constructor stub
			this.q = q;
			this.z = z;
		}

		@Override
		public int compareTo(Student o) {
			// TODO Auto-generated method stub
			return q - o.q;
		}
	}

以前做过一个差不多的,数据没这么大, ,方法就是每次加上可能是负数是绝对值,然后,在数组里面标记,这次这个,还是用这个方法吧,思路可以

发布了87 篇原创文章 · 获赞 27 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_43457125/article/details/104735575