战争尾声

战争尾声


题目描述

“当攻占主城成功的信号弹与敌人的子弹同时射出,信号弹照亮了民众对于和平的渴望与对于未来美好生活的所有畅想,而子弹却击碎了她下去的信念与存在的全部意义。”
“烟花易冷,少佐的生命也是如此,在温暖的光辉中照亮了她那唯有死亡同行的路,而这温柔的光芒也在这满是硝烟的空气中迅速降温、下落,熄灭,直至落回冰冷坚硬的地面上。”
——前言(略过不影响答题)
战火纷飞了二十多年的大陆终于看到了和平的曙光,
在昂榭尔王国、阿斯特赖亚国等几个大国的牵头下,大陆上的所有国家决定握手言和,停战修养。
作为战争结束的标志,需要所有国家签订一个停战协议。
一份完整的停战协议已经由我们的自动手记人偶 薇尔莉特 起草好了,
现在需要各个国家同时在同一个地点签订该停战协。
将整块大陆放在平面直角坐标系中,则大陆的西南角的坐标为 \text{ ( 1 , 1 ) } ( 1 , 1 ) ,东北角的坐标为\text{ ( 200 , 200 ) } ( 200 , 200 ) 。
现将给出 \mathit{n}n 个国家的坐标,第 \mathit{i}i 个国家的坐标为 ( x_i , y_i )(x
i​ ,y i​ ) ( 1 \leq i \leq n , 1 \leq x_i \leq 200 , 1 \leq y_i \leq 200,x_i\in Z,y_i\in Z)(1≤i≤n,1≤x i​ ≤200,1≤y i​ ≤200,x i​ ∈Z,y i​ ∈Z)
为了和平签订停战协议,你现在需要在这片大陆上,找到一个点,保证该点到所有国家的距离都 “相等”。
PS:答案坐标均为整数
PS:相等:两段距离差值的绝对值小于 10^{-4}10
−4 。如果大陆上找不到该点,请输出 War is cruel.

输入描述:

第一行,一个正整数 \mathit{n}n ,表示有 \mathit{n}n 个国家将会签订停战协议
接下来 n 行,每行两个正整数,第 \mathit{i}i 行表示第 \mathit{i}i 个国家的坐标 ( x_i , y_i )(x i​ ,y i​ ) ,以空格隔开。

输出描述:

第一行,输出满足条件的点的坐标,以空格隔开
如果满足条件的点不止一个,请优先输出横坐标 \mathit{x}x 较小的点,如果横坐标 \mathit{x}x 相等,优先输出纵坐标 \mathit{y}y 较小的点。
如果满足条件的点不存在,请输出 War is cruel.
PS:答案坐标均为整数

示例1

输入

2
1 2
2 1

输出

1 1

示例2

输入

5
3 1
2 3
3 5
4 4
6 5

输出

War is cruel.

备注:

数据范围:
对于10%的数据 n = 2 n=2 。
对于40%的数据保证 n \leq 10 n≤10 。
对于80%的数据保证 n \leq 50 n≤50 。
对于100%的数据保证所有 2 \leq n \leq 200 , 1 \leq x_i \leq 200 , 1 \leq y_i \leq 200,x_i\in Z,y_i\in Z2≤n≤200,1≤x
i​ ≤200,1≤y i​ ≤200,x i​ ∈Z,y i​ ∈Z。另外,对于60%的数据保证有解。
PS:答案坐标均为整数

题意

大陆上有多个国家,求大陆上的一点到各个国家之间的距离相等

思路

两点间距离公式 |AB|=√bai[(x2-x1)2+(y2-y1)2+(z2-z1)^2]
暴力枚举200*200个点中(整个大陆)上有没有一个点符合条件。

  • 先将各个国家的坐标存入二维数组中
  • 枚举200*200个坐标(i,j)
  • 检查(i,j)是否符合该点到所有国家之间的距离相等
  • 符合则输出(i,j)不符合则输出War is cruel.
#include<bits/stdc++.h>
using namespace std;
int num[3][10005];//存储各国家的坐标(x,y) 
int ans=0,n=0;
double sum;
int maxn=1000000,minn=-1;
bool check(int a,int b)
{
	for(int i=0;i<n-1;i++)
	{//a的值等于i的值,b的值等于j的值 
		ans=(a-num[0][i])*(a-num[0][i])+(b-num[1][i])*(b-num[1][i]);
		if(ans!=(a-num[0][i+1])*(a-num[0][i+1])+(b-num[1][i+1])*(b-num[1][i+1]))
		{
			return 0;//不符合条件 
		}
		//maxn=max(maxn,ans);
		//minn=min(minn,ans);
	}
	   return 1;//符合条件	
}
int main()
{
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d%d",&num[0][i],&num[1][i]);
	}
	for(int i=1;i<=200;i++)
	{
		for(int j=1;j<=200;j++)
		{
			if(check(i,j)==1)
			{
				printf("%d %d\n",i,j);
				return 0;
			}
		}
	}
	printf("War is cruel.");
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霖承科技 LinChance

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值