洛谷 P2777 [AHOI2016初中组]自行车比赛

本文介绍了一个用于预测自行车比赛中可能的冠军数量的算法。通过排序和比较选手已获分数,快速确定潜在冠军人选。

题目描述

小雪非常关注自行车比赛,尤其是环滨湖自行车赛。一年一度的环滨湖自行车赛,需要选手们连续比赛数日,最终按照累计得分决出冠军。今年一共有 N 位参赛选手。每一天的比赛总会决出当日的排名,第一名的选手会获得 N 点得分,第二名会获得 N-1 点得分,第三名会获得 N-2 点得分,依次类推,最后一名会获得 1 点得分。保证没有选手会排名相同。

在之前的数日较量中, N 位选手已经分别累计了一些分数。现在即将开始的是最后一天的比赛。小雪希望知道有多少位选手还有可能获得最终的冠军,也就是说还有多少选手有可能通过最后一天的比赛获得累计总分第一名

输入输出格式
输入格式:

第一行输入一个整数 N,表示参赛选手总数,保证 3<=N<=300000。

之后 N 行,其中第 i 行输入一个整数 B[i]表示第 i 位选手已经获得的累计分数,满足0<=B[i]<=2000000。

输出格式:

输出只有一行,只输出一个整数,表示有多少位选手有可能获得最终的冠军。

输入输出样例

输入样例#1:
3
8
10
9

输出样例#1:
3

输入样例#2:
5
15
14
15
12
14

输出样例#2:
4

说明

对于 20%的数据, 3<=N<=600。

对于 50%的数据, 3<=N<=10000。

对于 100%的数据, 3<=N<=300000 且 0<=B[i]<=2000000。


【分析】
初中题好难。。救命
看似是模拟+贪心,实则我并不知道怎么做。
我实际上只会 O(n^2) 然而这谁都会。
这绝对是因为数据水到死才能过的。这二年出题人越来越不严谨了。
(就应该打断腿回去反思数据是怎么出的)
难道数据全部是随机生成?!


【代码】
为了不误人子弟,提醒大家一下,这个代码除了能AC一无是处,它是错的思路,仔细想想就能看出来

//P2777 [AHOI2016初中组]自行车比赛
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define fo(i,j,k) for(i=j;i<=k;i++)
using namespace std;
int b[2000001],a[300001];
int main()
{
    int n,i,ans=0;
    scanf("%d",&n);
    fo(i,1,n)
      scanf("%d",&a[i]);
    sort(a+1,a+n+1);
    fo(i,1,n)
      if(a[i]+n>=a[n]+1) break;
    printf("%d\n",n-i+1);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值