列表

详情


NC252422. 做不出来的话,会受稻田姬的斥责啦

描述

秋静叶和秋穰子有 n 根木棍,长度分别为 a_1, \dots, a_n,且没有两根长度相同的木棍。她们想要用其中四根木棍首尾相接搭建一个好的四边形作为笼子来运送二维西瓜。
首先她们希望笼子的形状美观,所以他们希望这个笼子是凸的。其次二维西瓜通常被看作一个圆形,为了使得运送稳固,他们希望存在一个特定大小的二维西瓜,可以放置在笼子里并且同时与笼子的四条边都相切。请问他们是否做到呢?
形式化的,即,判断是否存在 1 \leq x < y < z < w \leq n,使得存在一个好四边形,其四条边长度分别为 a_x,a_y,a_za_w
其中一个四边形称为好四边形当且仅当这个四边形是凸的并且存在一个圆,这个圆在该四边形的内部并且与这个四边形的四个边都相切。

输入描述

第一行一个正整数 n
第二行 n 个正整数 a_i,保证两两不同。

输出描述

如果可以搭建一个好的四边形,输出 YES,否则输出 NO

示例1

输入:

4
2 3 5 10

输出:

NO

示例2

输入:

4
2 6 5 3

输出:

YES

原站题解

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

C++(g++ 7.5.0) 解法, 执行用时: 27ms, 内存消耗: 9600K, 提交时间: 2023-05-19 20:09:47

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int M=4e6+10;
int c[M];
int a[N];
int n;
int main(){
	scanf("%d",&n);
	for (int i=1;i<=n;i++) scanf("%d",&a[i]);
	for (int i=1;i<=n;i++)
		for (int j=i+1;j<=n;j++) if (!c[a[i]+a[j]]){
			c[a[i]+a[j]]=1; 
		}else {
			puts("YES"); return 0;
		}
	puts("NO");
}

pypy3 解法, 执行用时: 171ms, 内存消耗: 60820K, 提交时间: 2023-05-19 20:15:14

import sys
input = lambda:sys.stdin.readline().strip()
def func():
    n = int(input())
    a = list(map(int, input().split()))
    a.sort()
    h = [0]*(4*10**6+1)
    for i in range(n):
        for j in range(i):
            if h[a[i]+a[j]]:return 1
            h[a[i]+a[j]] = 1
if func():print('YES')
else:print('NO')

C++(clang++ 11.0.1) 解法, 执行用时: 95ms, 内存消耗: 5516K, 提交时间: 2023-05-21 20:50:58

#include<bits/stdc++.h>
using namespace std;
	int main()
	{
		int n;
		cin>>n;
		int i,a[n],j;
		map<int,int>p;
		for(i=0;i<n;i++)
		{
			cin>>a[i];
		}
		for(i=0;i<n;i++)
		for(j=i+1;j<n;j++)
		{
			if(p[a[i]+a[j]]==0)p[a[i]+a[j]]=1;
			else 
			{
				cout<<"YES"<<endl;return 0;
			}
		}
		cout<<"NO"<<endl;
	}

Python3 解法, 执行用时: 222ms, 内存消耗: 55576K, 提交时间: 2023-05-20 08:44:17

n = int(input())

f = [0] * 5000000

a = list(map(int, input().split()))

for i in range(n):
    for j in range(i + 1, n):
        if f[a[i] + a[j]]:
            print("YES")
            exit(0)
        f[a[i] + a[j]] = 1

print("NO")

上一题