列表

详情


NC239760. 温温的那些年(easy)

描述

本题有easy和hard两个版本,两道题仅在数据范围上有差别。
“那些年错过的大雨,那些年错过的爱情……”七夕到了,单身汪温温又在思(fa)春。 “如果能回到那些年就好了……”
“给你机会!”月老降临,随即“砰”地一声,温温真的回到了那些年。
“怎么是机房?!这,这不对吧……我的那个TA呢?”  温温看着眼前的题目,愣了,然后他本能地开始做起题来。
题目是这么说的:
你现在有个序列, 问是否存在一个n个节点的简单无向图(没有自环或者重边的无向图), 使得每个结点的度(与这个节点有边相连的节点的个数)与序列A中的元素一一对应。

输入描述

第一行输入N, 表示序列的长度
第二行输入N个整数a_1,a_2,...,a_n,为序列的元素。

输出描述

如果这样的图是存在的, 输出 "YES",否则输出"NO"(不包括双引号)。

示例1

输入:

6
4 4 3 3 2 2

输出:

YES

示例2

输入:

3
1 1 1

输出:

NO

原站题解

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

pypy3 解法, 执行用时: 75ms, 内存消耗: 21684K, 提交时间: 2022-08-05 11:40:29

n=int(input())
a=list(map(int,input().split()))
cnt=0
for v in a:
    if v>0:
        cnt+=1
s=sum(a)
flag=True

while flag and a:
    a.sort(reverse=True)
    temp=a[0]
    a=a[1:]
    for i in range(temp):
        a[i]-=1
        if a[i]<0:
            flag=False
            break
    
if sum(a)%2==0 and flag:
    print('YES')
else:
    print('NO')

Python3 解法, 执行用时: 193ms, 内存消耗: 4664K, 提交时间: 2022-08-04 22:47:07

n=int(input())
li=[int(i)for i in input().split()]
flag=0
li=sorted(li)
for i in range(len(li)):
    for j in range(1,li[i]+1):
        if(li[n-j]==0 or i==n-j):
            flag=1
        li[n-j]-=1
    li[i]=0
    li=sorted(li)
if(flag==0):
    print("YES")
else:
    print("NO")

C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 472K, 提交时间: 2022-08-06 22:31:51

#include <bits/stdc++.h>
using namespace std;
mt19937 rnd(time(0));
int main()
{
    cout << (rnd() & 1 ? "YES" : "NO");
    return 0;
}

上一题