zoukankan      html  css  js  c++  java
  • 洛谷 U139014 大使人选

    洛谷 U139014 大使人选

    洛谷传送门

    题目背景

    SeawaySeawa**y所效命的AlphaAlpha国和邪恶的EulerEuler国之间关系并不好,为了应付二国之间越来越频繁的外交交涉,AlphaAlpha国不得不更换一个更加能干的驻EulerEuler国特命全权大使。AlphaAlpha国人民委员会任命SeawaySeawa**y为外交部长,全面负责挑选合适的大使人选......

    题目描述

    大使应聘会上,SeawaySeawa**y面前站着清一色的NN名美女。(不是SeawaySeawa**y只选美女,是只有美女报名)。每名美女有一个美貌值b_ib**i。SeawaySeawa**y要从中挑选一位来出任大使。由于都是美女,SeawaySeawa**y要细细比较,不能大咧咧地刷掉长得太丑的。他的挑选策略是:每次挑出两名美貌值相差小于等于1的美女,并刷掉其中美貌值较小的。现在,SeawaySeawa**y想知道,他是否能够通过若干次挑选操作,挑出唯一的大使人选?

    输入格式

    从文件embassador.inembassado**r.i**n中读入数据。

    第一行一个整数tt,表示测试数据组数。每组测试数据的第一行是一个整数NN,第二行是NN个整数,描述每个美女的美貌值b_ib**i

    输出格式

    输出到文件embassador.outembassado**r.out中。

    对于每组数据,输出YESYES和NON**O来回答SeawaySeawa**y的问题。


    命题背景:

    加强了一下数据范围,我觉得10×105就挺大了,但是事实证明还可以更大。但是好像到不了106了,大约4×10^5吧。

    而且10^5还能稍微欺骗一下选手,以为是log算法。

    其实没啥问题啊,排序的确是log的。

    题解:

    一开始想奇偶,但很容易发现和奇偶无关。

    于是我们想探究性质:由于每次删除较小值,所以最后剩下的一定是最大值。

    而且一定是从小到大一个一个删除,要是跳跃了,就会出现有些点删不下去。

    比如,4 5 6。肯定要先删除4再删除5,如果删除5,4就无法删除。

    于是就是个排序。

    枚举所有位置和它上面的位置,如果相差小于等于1,就把满足条件次数+1,最后只需要看次数是否是n-1即可。

    代码:

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn=110;
    int n,cnt;
    int a[maxn];
    int main()
    {
    	int t;
    	scanf("%d",&t);
    	while(t--)
    	{
    		cnt=0;
    		scanf("%d",&n);
    		for(int i=1;i<=n;i++)
    			scanf("%d",&a[i]);
    		sort(a+1,a+n+1);
    		for(int i=1;i<n;i++)
    			if(a[i]==a[i+1]||a[i]+1==a[i+1])
    				cnt++;
    		puts(cnt==n-1?"YES":"NO");
    	}
    	return 0;
    }
    
  • 相关阅读:
    vim复制
    嵌入式Linux学习(二)
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1025 数的划分
    (Java实现)洛谷 P1093 奖学金
    (Java实现)洛谷 P1093 奖学金
    Java实现 洛谷 P1064 金明的预算方案
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13913514.html
Copyright © 2011-2022 走看看