zzuli-2175: GJJ的日常之再游戏

来源:互联网 发布:淘宝 买摩托车 编辑:程序博客网 时间:2024/05/09 11:45

传送门https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2175


2175: GJJ的日常之再游戏

Time Limit: 1 Sec  Memory Limit:128 MB
Submit: 837  Solved: 176

SubmitStatusWeb Board

Description

GJJ和WJJ又开始了游戏,然而由于WJJ太强了,所以GJJ只好靠计谋取胜,而正因为WJJ太强,所以用过一次的计谋便无效了。
GJJ和WJJ一共玩了N场游戏,如果GJJ想要获胜,必须得赢的场数比Wjj多。
问:GJJ能否获胜?

Input

多实例,到文件尾结束
每个样例第一行一个N(1<=N<=50000),表示GJJ每场使用的计谋的数量;
第二行是N个数x,表示计谋的编号(0<=x<=1000000000)。

Output

对于每组样例,如果GJJ获胜输出"Yes";否则输出"No"。

Sample Input

51 2 3 4 551 2 2 2 1

Sample Output

YesNo

HINT

Source

签到题,排序之后去重之后数组的长度即为GJJ胜利的场数。
注意数据范围不能使用set和map。
可以使用unique去重




#include<cstdio>#include<algorithm>using namespace std;bool cmp(int a,int b){    return a<b;} int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        long long a[50050];        for(int i=1; i<=n; i++)        {            scanf("%lld",&a[i]);        }        sort(a+1,a+n+1,cmp);        int sum=0;        for(int i=1; i<=n; i++)        {            if(a[i]==a[i+1])            sum++;        }        if(n%2==0)        {            if(sum<n/2)            printf("Yes\n");            else            printf("No\n");        }        else        {            if(sum<n/2+1)            printf("Yes\n");            else            printf("No\n");        }    }    return 0;}

#include<bits/stdc++.h>using namespace std;int a[50005];int main(){    int n;//    freopen("D://2.in","r",stdin);//    freopen("D://2.out","w",stdout);    while(scanf("%d",&n)!=-1)    {        for(int i=0;i<n;i++)            scanf("%d",&a[i]);        sort(a,a+n);        int l=unique(a,a+n)-a;        if(l>n/2)        {            puts("Yes");        }        else puts("No");    }    return 0;}