⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3260471_re.java

📁 北大大牛代码 1240道题的原代码 超级权威
💻 JAVA
字号:
import java.util.*;
import java.math.*;

public class Main
{

	public static void main(String [] args)	throws Exception
	{
		try
		{
			new Main().run();
		}
		catch (Error e)
		{
			e.printStackTrace();
		}
	}

	class Point	implements Comparable <Point>
	{
		BigInteger x, y;

		Point(String x,String y)
		{
			this.x = new BigInteger(x);
			this.y = new BigInteger(y);
		}

		public boolean equals(Point that)
		{
			return this.x.compareTo(that.x)==0&&this.y.compareTo(that.y)==0;
		}

		public int compareTo(Point that)
		{
			int vx = this.x.compareTo(that.x);
			int vy = this.y.compareTo(that.y);

			return vx==0 ? vy : vx;
		}
	}

	class Segment
	{
		Point st, ed;

		Segment(Point st,Point ed)
		{
                        this.st = new Point(st.x.toString(),st.y.toString());
                        this.ed = new Point(ed.x.toString(),ed.y.toString());
		}
	}

	int [] f;
	int [] d;
	int [] id;
	Point [] p;
	Segment [] s;
	int k, index;

	public void run()	throws Exception
	{
		Scanner in = new Scanner (System.in);
		String x, y;

		k = in.nextInt();

		p = new Point [k*2+1];
		d = new int [k*2+1];
		f = new int [k*2+1];
		id = new int [k*2+1];
		s = new Segment [k];

		for(int i = 0; i < k; i++)
		{
			x = in.next();
			y = in.next();
			p[2*i] = new Point(x,y);
			x = in.next();
			y = in.next();
			p[2*i+1] = new Point(x,y);
			s[i] = new Segment(p[2*i],p[2*i+1]);
		}
		Arrays.sort(p,0,2*k);
		index = 0;
		for(int i = 0; i < 2*k; i++)
		{
			int j = i;
			while(j < 2*k&&p[j].equals(p[i]))
			{
				id[j] = index;
                                j++;
			}
			index++;
			i = j-1;
		}
		for(int i = 0; i < k*2; i++)
		{
			f[i] = i;
		}
		for(int i = 0; i < k; i++)
		{
			int i1, i2;

			try
			{
				i1 = bsearch(s[i].st);
				i2 = bsearch(s[i].ed);
			}
			catch (Error e)
			{
				while(true)
				{
					System.out.println(e);
				}
			}
                        d[i1]++;d[i2]++;
			i1 = find(i1);
			i2 = find(i2);
			f[i1] = i2;
		}
		for(int i = 0; i < index; i++)
		{
			if(f[i]!=f[0]||d[i]%2!=0)
			{
				System.out.println("0");
				return ;
			}
		}
		System.out.println("1");
	}

	public int find(int t)
	{
		if(f[t]!=t)
			return f[t]=find(f[t]);
		else
			return f[t];
	}

	public int bsearch(Point t)
	{
		int min, max, mid;

		min = 0;max = 2*k;
		while(min <= max)
		{
			mid = (min + max) / 2;
			int v = p[mid].compareTo(t);
			if(v == 0)
			{
				return id[mid];
			}
			else
			{
				if(v > 0)
					max = mid-1;
				else
					min = mid+1;
			}
		}
		throw new Error("Elements not found");
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -