打卡信奥刷题(1633)用C++信奥 P7557 [USACO21OPEN] Acowdemia S

P7557 [USACO21OPEN] Acowdemia S

题目描述

由于对计算机科学的热爱,以及有朝一日成为 「Bessie 博士」的诱惑,奶牛 Bessie 开始攻读计算机科学博士学位。经过一段时间的学术研究,她已经发表了 NNN 篇论文(1≤N≤1051 \leq N \leq 10^51N105),并且她的第 iii 篇论文得到了来自其他研究文献的 cic_ici 次引用(0≤ci≤1050 \leq c_i \leq 10^50ci105)。

Bessie 听说学术成就可以用 hhh 指数来衡量。hhh 指数等于使得研究员有至少 hhh 篇引用次数不少于 hhh 的论文的最大整数 hhh。例如,如果一名研究员有 444 篇论文,引用次数分别为 (1,100,2,3)(1,100,2,3)(1,100,2,3),则 hhh 指数为 222,然而若引用次数为 (1,100,3,3)(1,100,3,3)(1,100,3,3)hhh 指数将会是 333

为了提升她的 hhh 指数,Bessie 计划写至多 KKK 篇综述(0≤K≤1050 \leq K \leq 10^50K105),并在每篇综述中引用许多她曾经写过的论文。然而,由于页数限制,她至多可以在一篇综述中引用 LLL 篇论文(0≤L≤1050 \leq L \leq 10^50L105)。当然,一篇综述中她只能引用一篇论文至多一次(但是一篇论文可以在多篇综述中被引用)。

请帮助 Bessie 求出在写完这些综述后她可以达到的最大 hhh 指数。Bessie 不可以在一篇综述中引用她写的其他综述。

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

输入格式

输入的第一行包含 NNNKKKLLL

第二行包含 NNN 个空格分隔的整数 c1,…,cNc_1,\ldots, c_Nc1,,cN

输出格式

输出最大可以达到的 hhh 指数。

输入输出样例 #1

输入 #1

4 4 1
1 100 1 1

输出 #1

3

说明/提示

样例说明

在这个样例中,Bessie 可以写至多一篇综述。如果 Bessie 引用她的第一、第三、第四篇论文中的任意一篇,她的 hhh 指数会变为 222

测试点性质:
  • 测试点 1∼61 \sim 616 满足 N≤100N\le 100N100
  • 测试点 7∼167 \sim 16716 没有额外限制。
说明

供题:Dhruv Rotation

C++实现

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,a[2000005],x,ans,k,l,qzh[200005],m,o;
bool cmp(ll ai,ll bi){
	return ai>bi;
}
int main(){
	cin>>n>>k>>l;
	if(l>n)l=n;//特判l大于n时则多余的为无意义要舍去
	m=k*l;
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
	}
	sort(a+1,a+1+n,cmp);//排序数列保证其有单调性(从小到大)
	for(int i=1;i<=n;i++){
		qzh[i]=qzh[i-1]+a[i];
	}//求前缀和
	for(int i=1;i<=n;i++){//从小到大枚举h
		if(a[i]<i){
			for(;a[o]<i&&o;o--){} //求大于h的数有哪些
			if(i*(i-o)-qzh[i]+qzh[o]<=m&&i-a[i]<=k){//判断操作是否够
				ans=i;//更新ans即最大的h指数。
			}
		}
		else {
			ans=i;//更新ans在无需操作时最大的h指数。
			o=i;//记录>h的个数
		}
	} 
	cout<<ans;
	return 0;
}

在这里插入图片描述

后续:

接下来我会不断用C++来实现信奥比赛中的算法题、C++考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值