牛的学术圈I


题目

3745. 牛的学术圈 I - AcWing题库

由于对计算机科学的热爱,以及有朝一日成为 「Bessie 博士」的诱惑,奶牛 Bessie 开始攻读计算机科学博士学位。

经过一段时间的学术研究,她已经发表了 $N$ 篇论文,并且她的第 $i$ 篇论文得到了来自其他研究文献的 $c_i$ 次引用。

Bessie 听说学术成就可以用 $h$ 指数来衡量。

$h$ 指数等于使得研究员有至少 $h$ 篇引用次数不少于 $h$ 的论文的最大整数 $h$。

例如,如果一名研究员有 $4$ 篇论文,引用次数分别为 $(1,100,2,3)$,则 $h$ 指数为 $2$,然而若引用次数为 $(1,100,3,3)$ 则 $h$ 指数将会是 $3$。

为了提升她的 $h$ 指数,Bessie 计划写一篇综述,并引用一些她曾经写过的论文。

由于页数限制,她至多可以在这篇综述中引用 $L$ 篇论文,并且她只能引用每篇她的论文至多一次。

请帮助 Bessie 求出在写完这篇综述后她可以达到的最大 $h$ 指数。

注意 Bessie 的导师可能会告知她纯粹为了提升 $h$ 指数而写综述存在违反学术道德的嫌疑;我们不建议其他学者模仿 Bessie 的行为。

输入格式

输入的第一行包含 $N$ 和 $L$。

第二行包含 $N$ 个空格分隔的整数 $c_1,…,c_N$。

输出格式

输出写完综述后 Bessie 可以达到的最大 hh 指数。

数据范围

$1≤N≤10^5$,
$0≤c_i≤10^5$,
$0≤L≤10^5$

输入样例1:

4 0
1 100 2 3

输出样例1:

2

样例1解释

Bessie 不能引用任何她曾经写过的论文。上文中提到,$(1,100,2,3)$ 的 $h$ 指数为 $2$。

输入样例2:

4 1
1 100 2 3

输出样例2:

3

如果 Bessie 引用她的第三篇论文,引用数会变为 $(1,100,3,3)$。上文中提到,这一引用数的 $h$ 指数为 $3$。

思路

核心就是至少$h$篇引用次数不少于$h$的论文的最大整数$h$,求的结果为$h$

所以进行有关的枚举,$ans$表示枚举的数

$c[i]$表示引用次数为$i$的论文的篇数

$sum$表示满足$h=ans$的文章数量

所以$sum + min(c[i], l) > ans$那么$ans$还可以进行进一步$+1$操作,否则当前的$ans$就是答案

代码

import java.util.*;
public class Main
{
    static int n, l;
    static int[] a = new int[100010];
    static int[] c = new int[100010];
    public static void main(String[] args) {
        Scanner inScanner = new Scanner(System.in);
        n = inScanner.nextInt();
        l = inScanner.nextInt();
        for(int i = 1; i <= n; i ++)
        {
            c[i] = inScanner.nextInt();
            a[c[i]] ++;
        }
        inScanner.close();
        int ans = 0, sum = n;
        for(;ans < n; ans ++)
        {
            sum -= a[ans];
            if(sum + Math.min(a[ans], l) <= ans)
                break;
        }
        System.out.println(ans);
    }
}

文章作者: 姜小白
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 姜小白 !
评论
  目录