首页 > 其他分享 >Educational Codeforces Round 131 (Rated for Div. 2)

Educational Codeforces Round 131 (Rated for Div. 2)

时间:2023-12-18 10:36:01浏览次数:43  
标签:Educational Rated int sum Codeforces mid cnt check

基本情况

AB秒了。C知道是二分答案,check死活写不出来。

C. Schedule Management

Problem - C - Codeforces

错误分析

这题比较绕,搞了一个对应关系,大脑转不过来。

写check的时候完全想不出合理的思路。

很明显的要用桶来计数,但是怎么用不知道了。

看了题解后发现,check不能遍历任务来检测,而是通过遍历工人来检测。

正确思路

对于 check 函数,我们先记录每个工人所擅长的工作数量 \(cnt_i\)。

然后我们贪心,如果有擅长的工作就先去做,经分析有以下两种情况。

  • 如果 \(x \le cnt_i\),那么他能完成 \(x\) 项工作(每项工作 \(1\) 小时)。
  • 否则,就先干擅长的 \(cnt_i\) 项,后干不擅长的 \(\lfloor\frac{x - cnt_i}{2}\rfloor\) (每项工作 \(2\) 小时)。

最后我们把干完的工作数量和 \(m\) 比较即可。

代码

bool check(int t)
{	
	long long sum = 0;
	for (int i = 1; i <= n; i++)
	{
		if (cnt[i] >= t) sum += t;
		else sum += cnt[i] + (t - cnt[i] >> 1);  
	}
	return sum >= m;
}

void solve()
{
	std::cin >> n >> m;
	memset(cnt, 0, sizeof(cnt));
	for (int i = 1; i <= m; i++) std::cin >> a[i], cnt[a[i]]++;
	int l = 1, r = m << 1, mid;
	while(l <= r)
	{
		mid = l + (r - l >> 1);
		if (check(mid)) r = mid - 1;
		else l = mid + 1;
	}
	std::cout << r + 1 << std::endl;
}

标签:Educational,Rated,int,sum,Codeforces,mid,cnt,check
From: https://www.cnblogs.com/kdlyh/p/17910468.html

相关文章

  • Educational Codeforces Round 159 (Rated for Div. 2)
    EducationalCodeforcesRound159(RatedforDiv.2)A-BinaryImbalance解题思路:有一对\((0,1)\),那么\(0\)就能无限增长。代码:#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=2e5+10;typedefpair<ll,ll>pii;constllm......
  • Codeforces Round 915 (Div. 2)
    基本情况A题还没进入状态,卡了快10分钟。B题一开始想复杂了,以为是树的直径,后面推出来发现针对叶子数目讨论就行了,正确思路出来太慢了(一个半小时)。C题留了半个多小时,随便口胡了一个LIS思路,但是判断无解没思路。C.LargestSubsequenceProblem-C-Codeforces首先我们把字......
  • Educational Codeforces Round 134 (Rated for Div. 2)
    基本情况AB秒了。C搞了一个错的二分答案,虽然过样例了。C.Min-MaxArrayTransformation错误分析没有进一步推导性质,而是觉得数据单调递增估计是二分,然后就无脑写,实际上check的正确性没有保证。boolcheck(intind,intnow){ if(ind==now)returntrue; if(b[ind]......
  • Codeforces Round 867 (Div. 3)
    CodeforcesRound867(Div.3)A:ABCD(E差一点点,最后把那种特殊情况想出来然后没写上去就结束了)A.TubeTubeFeed题意:给两个数组分别是时间和价值,要价值最大但是只能选一个思路:最开始以为是01背包,结果只选一个,一个一个枚举就行#include<bits/stdc++.h>usingnamespace......
  • Codeforces Round 855 (Div. 3)
    CodeforcesRound855(Div.3)A.IsItaCat?题意:要求:字符串必须以只包含字母"m"或"M"的非空序列开始必须紧跟由'e'或'E'字符组成的非空序列必须紧接着仅由字符'o'或'O'组成的非空序列必须紧接着是仅由字符'w'或'W'组成的非空序列思路:一个一个来(WA了三发注意这几......
  • Codeforces Round 913 (Div. 3)
    CodeforcesRound913(Div.3)A:ABCA.Rook简单题,就两个循环搞定(直接上码)#include<bits/stdc++.h>usingnamespacestd;voidsolve(){chara;intb;cin>>a>>b;for(inti=1;i<=8;i++){if(i!=b){......
  • Codeforces Round 863 (Div. 3)
    CodeforcesRound863(Div.3)A.InsertDigit题意:插入一个字母使得这个数字最大化思路:只要从前往后便利就行#include<iostream>usingnamespacestd;voidsolve(){intn,k;cin>>n>>k;boolx=true,y=false;for(inti=0;i<n;i++){......
  • Codeforces Round 913 (Div. 3)
    CF1907总结A.Rook题面翻译给出车在国际象棋棋盘中的位置,输出其可到达的坐标(不必在意顺序)。车可以横着或竖着走任意格数。分析题意明了,输出车所在行和列所有格子的序号(除车所在位置外)。code#include<bits/stdc++.h>usingnamespacestd;intt;voidsolve(){ string......
  • Codeforces Round 891 (Div3)
    CodeforcesRound891(Div.3)A.ArrayColoring这个我vp的时候写复杂了,想不到答案的思路这么清晰,将两部分分别看,将偶数加进去其奇偶性不变,只有奇数加进去才会改变奇偶性,so只有改变偶数次奇偶性才能使其奇偶性相同,所以cnt%2==0.#include<bits/stdc++.h>usingnamespacestd;......
  • Codeforces Round 816 (Div. 2) VP
    基本情況A秒了,B错一次之后也过了,C没思路。B.BeautifulArrayProblem-B-Codeforcesvoidsolve(){ longlongn,k,b,s; memset(ans,0,sizeof(ans)); std::cin>>n>>k>>b>>s; if(s<b*k){std::cout<<"-1\n";ret......