首页 > 其他分享 >codeforces刷题(1100):1902B_div2

codeforces刷题(1100):1902B_div2

时间:2023-12-28 16:22:05浏览次数:38  
标签:tasks 天数 ll codeforces 1902B 任务 学分 接取 div2

B、Getting Points

跳转原题点击此:该题地址

1、题目大意

  Monocarp为了完成总共n天的某学期的p学分任务。Monocarp每天可以选择两种度过方式:上一次课和完成最多两个任务 或者 休息一天。其中上课获得l学分,每个任务获得t学分,其中任务不可以重复接取,并且每周获得一个新的任务(第一天获得第一个任务,第8天获得第二个任务,以此类推),每个任务接取后可以在任意一天完成。
  Monocarp只想完成最低要求并获得最大休息天数,问如何安排学习任务可以获得最大休息天数。

2、题目解析

  由于每个任务接取后可以在任意一天完成,所以我们可以倒着往前推,先按照每天上一次课和两个任务(如果有的话)算,如果学分还不够就不断地每天上课直至完成即可。

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
const int N = 2e5+10;

int T;
ll n, p, l, t;  // 注意输入范围
int f[N];

void solve()
{
	cin >> n >> p >> l >> t;
	
	ll tasks = 0;   // 计算该学期一共能有几个任务
	if(n % 7 == 0)
		tasks = n / 7;
	else
		tasks = n / 7 + 1;
		
	ll tmp = tasks / 2;	
    //计算有多少个既能上课又能完成两个任务的天数
	ll sum_day = tmp * t * 2 + l * tmp;
	if(sum_day >= p)	// 如果满学习的天数 >= 总学分
	{
		ll tmp1 = 2 * t + l;
		if(p % tmp1 == 0)	// 算只需要几个满任务天数
			cout << n - (p / tmp1) << endl;
		else
			cout << n - (p / tmp1 + 1) << endl;
		return;
	}
	p -= sum_day;	// 满学习的总学分不足则用上课和多余的任务补足
	
	if(tasks % 2 == 1)	// 如果总任务是奇数,则最开始会有一个不算在那
	{
		if(p <= (l + t))
		{
			cout << n - (tmp + 1) << endl;
			return;
		}
		p -= (l + t);  // 剩余要求学分
		tmp++;
	}
    // 如果任务都解决了学分还是不够,那就只能上课
	if(p % l == 0)
		cout << n - (tmp + p / l) << endl;
	else
		cout << n - (tmp + p / l + 1) << endl;
}

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

	return 0;
}

 

标签:tasks,天数,ll,codeforces,1902B,任务,学分,接取,div2
From: https://www.cnblogs.com/Tom-catlll/p/17932955.html

相关文章

  • 「题解」Codeforces 1427G One Billion Shades of Grey
    感谢127的指导/ll\(|h_u-h_v|=\max(0,h_u-h_v)+\max(0,h_v-h_u)\),那么可以把它看成这样的问题:\[\min\{\sum_{(u,v)}\max(0,h_u-h_v+w_{u,v})c_{u,v}\}\]对偶一下,问题就变为:如果两个格子相邻就互相连容量为\(c_{u,v}=1\),费用为\(w_{u,v}=0\)的边,跑最大费用循环流。为了限......
  • codeforces刷题(1100):1904B_div2
    B、CollectingGame跳转原题点击此:该题地址1、题目大意  获得一个由n位正整数组成的数组。你可以选择选择任意一个数作为你的判断值。然后任意一个\(\le\)它的数可以被选中加入你的分数(注意判断值不算在里面),同时该数被移除数组。你的任务是,对于该数组中的每个数,都将其作为......
  • codeforces刷题(1100):1905B_div2
    B、Begginer'sZelda跳转原题点击此:此题地址1、题目大意  给你一个子树,你可任意选择两个节点\(u、v\),这两个节点之间的所有节点(包括\(u、v\))都将结合变为一个新的节点。要求你通过该操作将所有的节点变为只有一个节点,求最小的操作数。2、题目解析  由题意可得:当\(u、v\)......
  • CodeForces 1917E Construct Matrix
    洛谷传送门CF传送门\(2\nmidk\)显然无解。若\(4\midk\),发现给一个全\(2\times2\)子矩形全部异或\(1\)不会对行异或和和列异或和造成影响。那么我们找到\(\frac{k}{4}\)个全\(0\)的\(2\times2\)子矩形填\(1\)即可。否则若\(k=2\)或\(k=n^2-2\)......
  • CodeForces 1917F Construct Tree
    洛谷传送门CF传送门考虑形式化地描述这个问题。先把\(l\)排序。然后相当于是否存在一个\(\{1,2,\ldots,n\}\)的子集\(S\),使得:\(\sum\limits_{i\inS}l_i=d\)。\(\existsT\subseteqS,\max\limits_{i\notinS}l_i\le\min(\sum\limits_{i\inT}l_i,\sum......
  • Codeforces Round 915 (div2) E
    E.TreeQueries[题目链接](https://codeforces.com/contest/1904/problem/EProblem-E-Codeforces)题意概括:给定一棵大小为\(n\)的树,回答如下询问,询问之间相互独立:给定一个点\(x\)与\(k\)个点\(a_i\),求出从\(x\)出发不经过任何一个\(a_i\)的最长简单路径长度......
  • codeforces刷题(1100):1917B_div2
    模板B、EraseFirstorSecondLetter跳转原题点击此:该题地址1、题目大意  给你一个字符串,可以执行任意次以下操作,生成最终的字符串(不可为空),问你能生成的不重复字符串数为多少。操作一:删除字符串第一个字符;操作二:删除字符串第二个字符。2、题目解析  发现,操作一:即选......
  • Codeforces 1909G - Pumping Lemma
    这个题思考角度很多,做法也很多。这里介绍一种@asmend和我讲的做法。设\(d=m-n\),那么我们枚举\(|x|=i,|y|=j\),设\(s,t\)的LCP长为\(l_1\),LCS长为\(l_2\),那么可以得到这组\((i,j)\)合法的充要条件是:\(i\lel_1\)\(m-i-j-d\lel_2\)。\(d\bmodj=0\)。\(t[i,i+d-1......
  • Codeforces1917F - Construct Tree
    Codeforces1917F-ConstructTreeProblems给一个长度为\(n\)的序列\(l\)和\(d\)。要求判断是否可以构造出一颗节点数为\(n+1\)的树,满足\(l\)的每一个元素唯一对应为一条边的长度,并使整棵树的直径长度恰好为\(d\)。Solution不妨令\(l_1\lel_2\le\cdots\lel_......
  • CodeForces 1906K Deck-Building Game
    洛谷传送门CF传送门UNR#2黎明前的巧克力。枚举两个人选的卡的并集\(S\),那么当\(\bigoplus\limits_{i\inS}a_i=0\)时\(S\)有贡献\(2^{|S|}\)。考虑将\(2^{|S|}\)分摊到每个元素上,也就是每个元素有\(2\)的贡献,然后把这些贡献乘起来。所以题目其实是想让我们算......