列表

详情


NC215073. 战争尾声

描述


“当攻占主城成功的信号弹与敌人的子弹同时射出,信号弹照亮了民众对于和平的渴望与对于未来美好生活的所有畅想,而子弹却击碎了她下去的信念与存在的全部意义。”

“烟花易冷,少佐的生命也是如此,在温暖的光辉中照亮了她那唯有死亡同行的路,而这温柔的光芒也在这满是硝烟的空气中迅速降温、下落,熄灭,直至落回冰冷坚硬的地面上。”

——前言(略过不影响答题)

战火纷飞了二十多年的大陆终于看到了和平的曙光,
在昂榭尔王国、阿斯特赖亚国等几个大国的牵头下,大陆上的所有国家决定握手言和,停战修养。
作为战争结束的标志,需要所有国家签订一个停战协议。
一份完整的停战协议已经由我们的自动手记人偶 薇尔莉特 起草好了,
现在需要各个国家同时在同一个地点签订该停战协议。

将整块大陆放在平面直角坐标系中,则大陆的西南角的坐标为  ,东北角的坐标为

现将给出  个国家的坐标,第  个国家的坐标为  

为了和平签订停战协议,你现在需要在这片大陆上,找到一个点,保证该点到所有国家的距离都 “相等”。
PS:答案坐标均为整数

PS:相等:两段距离差值的绝对值小于 

如果大陆上找不到该点,请输出 War is cruel.


输入描述

第一行,一个正整数  ,表示有  个国家将会签订停战协议
接下来 n 行,每行两个正整数,第  行表示第  个国家的坐标  ,以空格隔开。

输出描述

第一行,输出满足条件的点的坐标,以空格隔开

如果满足条件的点不止一个,请优先输出横坐标  较小的点,如果横坐标  相等,优先输出纵坐标  较小的点。

如果满足条件的点不存在,请输出 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.

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang11) 解法, 执行用时: 5ms, 内存消耗: 372K, 提交时间: 2021-01-23 21:09:54

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
	int n,flag=0;
	scanf("%d",&n);
	int i,j,k;
	int x[201],y[201];
	for(i=0;i<n;i++)
	scanf("%d%d",&x[i],&y[i]);
	for(j=1;j<=200;j++)
	{
		for(k=1;k<200;k++)
		{
			for(i=0;i<n-1;i++)
			{
				if((x[i]-j)*(x[i]-j)+(y[i]-k)*(y[i]-k)!=(x[i+1]-j)*(x[i+1]-j)+(y[i+1]-k)*(y[i+1]-k))
					
					break;
			}
			if(i==n-1&&flag==0)
			printf("%d %d",j,k),flag=2;
				
		}
	}
	if(flag==0)
	printf("War is cruel.");
	return 0;
}

Python3 解法, 执行用时: 153ms, 内存消耗: 7056K, 提交时间: 2021-11-28 15:48:02

import sys
import math
n=int(input())
A= [[0]*2 for i in range(n)]
for j in range(n):
    A[j][0],A[j][1]=map(int,input().split())

for x in range(1,201):
    for y in range(1,201):
        j=1
        d1=math.sqrt((x-A[0][0])**2+(y-A[0][1])**2)
        
        while abs(d1-math.sqrt((x-A[j][0])**2+(y-A[j][1])**2))<=0.0001: 
            if j==n-1:
                print(x,y)
                sys.exit()
            j+=1
print("War is cruel.")

C++(clang++11) 解法, 执行用时: 9ms, 内存消耗: 388K, 提交时间: 2021-01-22 18:48:29

#include<stdio.h>
#include<string.h>
typedef long long ll;
int x[205],y[205];
int main() {
	int n,len;
	scanf("%d",&n);
	for(int i=1;i<=n;++i) scanf("%d%d",&x[i],&y[i]);
	for(int i=1,j,k;i<=200;++i)
	for(j=1;j<=200;++j) {
		k=2;
		len=(i-x[1])*(i-x[1])+(j-y[1])*(j-y[1]);
		while((i-x[k])*(i-x[k])+(j-y[k])*(j-y[k])==len&&k<=n) k+=1;
		if(k>n) {
			printf("%d %d\n",i,j);
			return 0;
		} 
	}
	puts("War is cruel.");
	return 0;
}

上一题