pku 2165 gumman

标签: iostream struct ios
335人阅读 评论(0) 收藏 举报

这是一道经典题目,很少处理空间中的问题。

only if coordinate of intersection point in a certain range, including x,y;

that is to "project ", we can get x-coordinate by calculating intersection of a serial of ranges;

next to get two angels, using project, we can solve it on a plane.

Source
#include <iostream>
#include <iomanip>
#include <cmath>
#define N 102
using namespace std;

const double eps = 1e-10;

int n;
struct Window
{
	double lbx,lby,rux,ruy;
	double z;
};
istream& operator >> (istream& in, Window& win)
{
	in>>win.lbx>>win.lby>>win.rux>>win.ruy>>win.z;
	return in;
}

Window window[N];
// project to x_o_y
// O(n)
int cal1(double& k)
{
	double maxV = 1e15,minV=-1e15 ,tmax,tmin;
	for (int I=0; I<n; ++I)
	{

		if (window[I].z != 0)
		{
			tmax = window[I].ruy/window[I].z;
			tmin = window[I].lby/window[I].z;
			maxV = min(maxV,tmax);
			minV = max(minV,tmin);
		}
		if (maxV < minV)
			break;
	}
	if (maxV < minV) return 0;
	k = (minV + maxV)/2;
	return 1;
}

int cal2(double& x)
{
	double maxV = 1e15, minV = -1e15,tmax,tmin;

	for (int I=0; I<n-1; ++I)
	{
		for (int J=I+1; J<n; ++J)
		{
			if (window[I].z == window[J].z)
			{
				maxV = -1;
				minV = 1;
				goto fail;
			}
			tmin = window[I].lbx - (window[J].rux-window[I].lbx)*window[I].z/(window[J].z - window[I].z);
			tmax = window[I].rux - (window[J].lbx-window[I].rux)*window[I].z/(window[J].z - window[I].z);
			minV = max(minV,tmin);
			maxV = min(maxV,tmax);
			if (maxV < minV)goto fail;
		}
	}
fail:
	if (maxV < minV)
		return 0;
	x = (minV+maxV)/2;
	return 1;
}

int caldir(double x, double & k)
{
	double rV = 1e15,lV=-1 ,tr,tl;
	for (int I=0; I<n; ++I)
	{
		tr = (window[I].rux - x)/sqrt((window[I].rux - x)*(window[I].rux - x)+window[I].z*window[I].z);
		tl = (window[I].lbx - x)/sqrt((window[I].lbx - x)*(window[I].lbx - x)+window[I].z*window[I].z);
		rV = min(rV,tr);
		lV = max(lV,tl);
	}
	if (rV < lV-eps)
		return 0;
	k = (lV+rV)/2/sin(acos((lV+rV)/2));
	return 1;
}

void print(double k1,double x, double k2)
{
	for (int I=0; I<n; ++I)
	{
		cout<<(x + k2*window[I].z)<<' '<<window[I].z*k1<<' '<<window[I].z<<endl;
	}
}

int main()
{
	cin>>n;
	for (int I=0; I<n; ++I)
		cin>>window[I];
	double k1,k2;
	double x;
	if (cal1(k1)==0 || cal2(x)==0 || caldir(x,k2)==0)
	{
		cout<<"UNSOLVABLE"<<endl;
	}
	else
	{
		cout<<"SOLUTION"<<endl;
		cout<<setiosflags(ios::fixed)<<setprecision(6)<<x<<endl;
		print(k1,x,k2);
	}
	return 0;
}
查看评论

HDU1312 ZOJ2165 Red and Black【DFS】

Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...
  • tigerisland45
  • tigerisland45
  • 2016年07月19日 08:45
  • 632

PKU Campus 2016 I:PKU Zealots(模拟)

PKU Campus 2016 I:PKU Zealots(模拟)
  • PKU_ZZY
  • PKU_ZZY
  • 2017年02月13日 17:48
  • 568

一个比较好的PKU题目分类

转贴 ACM的算法(觉得很好,有层次感) OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,p...
  • yahreso
  • yahreso
  • 2008年03月29日 11:37
  • 775

PKU OJ 类

按照ac的代码长度分类(主要参考最短代码和自己写的代码)   短代码:0.01K--0.50K;中短代码:0.51K--1.00K;中等代码量:1.01K--2.00K;长代码:2.01K以上。  ...
  • baidu_24789559
  • baidu_24789559
  • 2014年12月24日 13:13
  • 676

Pku 1067 取石子游戏

Pku 1067 取石子游戏 博弈
  • GreenAppple
  • GreenAppple
  • 2011年03月27日 10:13
  • 926

pku算法

主流算法:1.搜索 //回溯2.DP(动态规划) 3.贪心 4.图论 //Dijkstra、最小生成树、网络流5.数论 //解模线性方程6.计算几何 //凸壳、同等安置矩形的并的面积与周长7.组合数学...
  • politefish
  • politefish
  • 2009年10月22日 15:11
  • 6684

PKU Campus 2016

记录一下昨天做pku campus 2016的过程吧(赛后查了查,也没有题解,于是乎将自己写的题的想法留下来,希望对大家有些帮助)。比赛链接:http://poj.openjudge.cn/campu...
  • luotuoqingshan
  • luotuoqingshan
  • 2016年11月07日 20:02
  • 620

2016.5.8 PKU校赛总结

必须感谢PKU的包容,使得我这种没有书读的文盲得以参加off-line比赛,十分excited!下面是流水账。   上个月在群上得知了这个比赛,然后顺带在群上找到了一位高中生队友absi2011,这...
  • squee_spoon
  • squee_spoon
  • 2016年05月09日 13:58
  • 1001

PKU Campus 2015解题报告

PKU Campus 2015解题报告这是第一次参加北大校赛,有一段时间没有好好做题了,加上自己太水,这场比赛做得很不好,场下仔细想了想没搞定的题目,其实没有想象中那么难~下次北大校赛,一定要好好打!...
  • SunliyMonkey
  • SunliyMonkey
  • 2015年05月13日 16:41
  • 1485

pku 1061青蛙的约会

扩展欧几里得 详细介绍 : http://hi.baidu.com/%B1%BF%D0%A1%BA%A2_shw/blog/item/0676025d56a87d4afbf2c093.html 扩...
  • u013849646
  • u013849646
  • 2014年03月25日 01:40
  • 758
    个人资料
    等级:
    访问量: 4万+
    积分: 846
    排名: 6万+
    文章分类
    最新评论