首页 > 编程语言 >C.现在是,学术时间 (I)【2023牛客寒假算法基础集训营1】

C.现在是,学术时间 (I)【2023牛客寒假算法基础集训营1】

时间:2023-01-18 18:56:26浏览次数:49  
标签:int 论文 mid long 牛客 2023 -- 集训营 check

C.现在是,学术时间 (I)

原题链接

题意

  • 每个教授i有1篇引用量为\(a_i\)的论文,求将论文重新分配后的最大H指数和

一位教授的H指数为使得"该教授发表的所有论文中,有至少H篇论文的引用量大于等于H"这一命题成立的最大的H。

思路1

  1. 如果不对论文进行分配,那么每篇被引用数量不为0的论文对H指数和的贡献都为1,最大H指数和为被引用数量不为0的论文数
  2. 由于最大H指数和不可能大于被引用数量不为0的论文数,因此不进行分配便是最优解
    “不要想学术不端,平平淡淡才是真”??

代码

点击查看代码
#include <bits/stdc++.h>

using i64 = long long;

void solve() {
    int n;
    std::cin >> n;
    
    int ans = 0;
    for (int i = 0; i < n; i++) {
        int a;
        std::cin >> a;
        ans += (a > 0);	//如果不为0,答案就+1
    }
    std::cout << ans << "\n";
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
    int t;
    std::cin >> t;
    
    while (t--) {
        solve();
    }
    
    return 0;
}

思路2

  1. 因为论文顺序对原题不产生影响,则可以二分制造出序列的二段性后通过多次二分【每次r不变,因为每篇论文只能使用1次】每次找到符合条件的H指数再求和

代码

点击查看代码
#include<iostream>
using namespace std;

#define prep(i,a,b) for(int i = (a); i <= (b); i ++)
#define rrep(i,a,b) for(int i = (a); i >= (b); i --)

typedef long long LL;
const char nl = '\n';
int T, n, m;

const int N = 1e5 + 10;
int a[N];

bool check(int x){
	return a[x] >= n - x + 1;
}

void solve() {
	LL ans = 0;
	cin >> n;
	prep(i,1,n)cin >> a[i];
	sort(a + 1,a + n + 1);
	int l = 1,r = n;
	while(l < r){
		int mid = l + r >> 1;
		if(check(mid))r = mid;
		else l = mid + 1;
	}
	if(!check(l)){
		cout << 0 << nl;
		return;
	}
	else{
		ans += (n - l + 1);
		while(l > 1){	//当论文没有使用完时
			l = 1,r --,n = r;	//每次l复原,r--,n = r相当于分成若干个二分问题求总和
			while(l < r){
				int mid = l + r >> 1;
				if(check(mid))r = mid;
				else l = mid + 1;
			}
            if(!check(l))continue;
			else ans += (n - l + 1);
		}
	} 
	cout << ans << nl;

}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	cin >> T;
	while (T--) {
		solve();
	}

	return 0;
}

标签:int,论文,mid,long,牛客,2023,--,集训营,check
From: https://www.cnblogs.com/J-12045/p/17060399.html

相关文章

  • 2023牛客寒假算法基础集训营1
    新学到的小知识:c++实现四舍五入的方法:round()函数:https://www.nhooo.com/cpp/cpp-library-function-cmath-round.html如:  ......
  • WC2023 游记
    这是一次抽象的WCDay0开幕式不想去,睡大觉Day1-4Day1早上的第一课堂太抽象了,润去第二课堂听矩乘,被评论区吓到了下午听题目选讲,感觉都听不太懂,想到之后还有好多的......
  • L.本题主要考察了运气【2023牛客寒假算法基础集训营1】
    L.本题主要考察了运气原题链接题意给出5个团体,每个团体4个人,猜出某个人的期望次数是多少?思路由于每个团和每个人并没有区别,因此最佳策略是先猜团后猜人共5个团,第1......
  • A.World Final? World Cup! (I)【2023牛客寒假算法基础集训营1】
    A.WorldFinal?WorldCup!(I)原题链接题意AB两队ABABABABAB形式轮流罚球共10次,给出01串代表每次罚球的结果,问是否能在第x球后知道比赛结果,能则输出x,若10轮内没有分出......
  • Waves 14 Complete for Mac(Waves混音效果全套插件) v17.01.2023激活版
    Waves14mac中文版是mac上一款混响功能非常强大的音频编辑后期混音插件套装!全新版本的Waves14Complete拥有需要新的功能,我们最受欢迎的压缩机增加了混合和微调旋钮在API......
  • 【2023.01.18】N5105核显直通给LXC,PVE安装核显驱动
    先使用命令查看核显、渲染器权限及组ls-l/dev/dri更新内核aptupdate&&aptinstallpve-kernel-5.19检查固件是否齐全cd/lib/firmware/i915&&lsehl_guc*.b......
  • 算法--2023.1.17
    1.力扣236--二叉树的最近公共祖先classSolution{publicTreeNodelowestCommonAncestor(TreeNoderoot,TreeNodep,TreeNodeq){if(root==null){......
  • 牛客2023寒假集训第一场
    A题 思维题,唯一要注意的就是在奇数场也能获胜(比赛时脑子抽了认定必须要偶数场才能判断是否获胜,也就是必须打完一轮)#include<bits/stdc++.h>usingnamespacestd;int......
  • 2023牛客寒假算法基础集训营1
    2023牛客寒假算法基础集训营1AA题目大意是AB两个个人点球,给你一个长度为10的字符串,1即为成功,否则失败,问多少场可以结束(得出谁输谁赢),否则输出-1我们可以记录到某一点的......
  • 【2023-01-17】销售工作
    20:00我逐渐确信人际关系中的真实、诚信、正直对于人生的幸福至关重要。                              ......