首页 > 其他分享 >2020-2021 ICPC, NERC, Southern and Volga Russian Regional Contest (Online Mirror, ICPC Rules) N. Was

2020-2021 ICPC, NERC, Southern and Volga Russian Regional Contest (Online Mirror, ICPC Rules) N. Was

时间:2023-10-12 17:12:32浏览次数:31  
标签:纸质 Sorting Contest 塑料 ICPC 垃圾桶 垃圾 垃圾箱

有五种种类的垃圾,数量分别为 \(a_1, a_2, a_3, a_4, a_5\) 。

  • 第一种为纸质垃圾
  • 第二种为塑料垃圾
  • 第三种双非垃圾
  • 第四种基本纸质垃圾
  • 第五种基本塑料垃圾

有三种垃圾桶,容量分别为 \(c_1, c_2, c_3\) 。

  • 第一种垃圾桶可以放入:纸质垃圾和基本纸质垃圾
  • 第二种垃圾桶可以放入:塑料垃圾和基本塑料垃圾
  • 第三种垃圾桶可以放入:双非垃圾、基本纸质垃圾、基本塑料垃圾

给出 \(a_{1 \sim 5}, c_{1 \sim 3}\) 。询问能否将所有垃圾扔入垃圾桶。

考虑从限制强的到限制弱的逐步解决。

先将第 \(1, 2, 3\) 种垃圾放入第 \(1, 2, 3\) 个垃圾桶。如果可以则继续,更新垃圾桶容量。

  • \(c_1 -= a_1, c_2 -= a_2, c_3 -= a_3\) 。

此时第 \(4\) 种垃圾可以装入第 \(1, 3\) 种垃圾箱;第 \(5\) 种垃圾可以装入第 \(2, 3\) 种垃圾箱。

于是先将限制强的不能共用的 \(1, 2\) 号垃圾箱装满,再将剩余的装入 \(3\) 号垃圾箱。

  • \(a_4 -= min(a_4, c_1), a_5 -= min(a_5, c_2)\)
  • \(a_4 + a_5 \leq c_3\)

上述原理仅在于:处理掉限制强的独立问题后,便可直接考虑不独立问题。

view
#include <bits/stdc++.h>
void solve(){
	std::vector<int> a(5+1), c(3+1);
	for (int i = 1; i <= 3; i++) std::cin >> c[i];
	for (int i = 1; i <= 5; i++) std::cin >> a[i];
	if (a[1] <= c[1] && a[2] <= c[2] && a[3] <= c[3]) {
		c[1] -= a[1]; c[2] -= a[2]; c[3] -= a[3];
		a[4] -= std::min(a[4], c[1]); a[5] -= std::min(a[5], c[2]);
		if (a[4] + a[5] <= c[3]) std::cout << "YES\n";
		else std::cout << "NO\n";
	}
	else std::cout << "NO" << "\n";
}
int main() {
	int _ = 1; std::cin >> _;
	while (_--) {solve();}
	return 0;
}

标签:纸质,Sorting,Contest,塑料,ICPC,垃圾桶,垃圾,垃圾箱
From: https://www.cnblogs.com/zsxuan/p/17759839.html

相关文章

  • Atcoder Grand Contest 016 E - Poor Turkeys
    先思考这样一个问题:对于一只火鸡\(i\),我们应该如何判断它最后是否能活下来。如果我们正着判断,我们其实并没有足够的证据表明每一次操作我们应该保留哪只火鸡,也就没法判断最终的答案。但是如果我们倒着考虑,我们发现,如果最后一次操作的两个火鸡都不是\(i\),那么这次操作选啥对答案......
  • April Fools Day Contest 2021 A. Is it rated - 2
    询问若干个问题,每个问题用一段字符串表示,存在空格。每个问题一行,对于每个回答,只需要输出\(NO\)。view1#include<bits/stdc++.h>chars[1000005];voidsolve(){ while(fgets(s,1000005,stdin)!=NULL){ std::cout<<"NO"<<std::endl;//fgets从流中读取,读取失......
  • 2021-2022 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2021) gym 104670
    原题容易想到最短路DAG求出来,起初我以为要求最小割,但这是错误的,因为可能有多条边联通了一个点的情况,这时候选择最小割不一定是最优的我们猜想一个思路:答案一定是包含\(1\)号节点的连通块全部填\(N\),剩下的填\(S\)。发现在最短路DAG中,\(1\rightarrown\)的所有路径......
  • AtCoder Regular Contest 166——A - Replace C or Swap AB
    题目描述  中文题目描述每个字符串的长度为N,由A,B和C组成。通过对X执行以下三种操作任意次数(可能为零),确定是否有可能使X与y重合。 操作(1):选择X中的字符C替换为字符A。操作(2):在X中选择字符C替换为字符B。操作(3):选择X中的子字符串AB,替换为BA。更正式地说,选择......
  • 2022 杭州 ICPC 补题 ACKG
    2022杭州ICPC补题ACKGhttps://codeforces.com/gym/104090笨成sb,啥也不会写完两个签到就坐牢(要补到银首,所以还差一个G题没补)说实话补了三题,感觉就是一些算法的延申,比如这一场的铜牌题其实考到的就是exgcd,Trie,背包dp,但是又不完全是单纯靠这个算法,需要你有一些引......
  • [ICPC2015WF] Tours
    题目描述TheArcaCaraniaMountainnationalparkisopeningupfortouristtraffic.Thenationalparkhasanumberofsitesworthseeingandroadsthatconnectpairsofsites.Theparkcommissionershaveputtogetherasetofroundtoursintheparkinwhich......
  • AtCoder Beginner Contest 323 (ABC 323) D、E、F 题解
    AtCoderBeginnerContest323(ABC323)D、E、F题解D题目大意给\(n\)种数\(s_i\),每一种数有\(c_i\)个,每次可以把两个相同的数合并为一个数,问最后会剩下多少数?分析对于每一个数\(s_i\),它最多被分解\(log_2c_i\)次,并且合并出来最大的数的大小小于\(s_i\timesc_i......
  • AtCoder Beginner Contest 323
    E-Playlist首先需要算出第x+0.5秒后,第一首歌播放的概率1.要在x+0.5秒后播放第一首,需要在x,x-1,x-2,...,x-t[1]+1,时就要开始播放第一首,并且概率是1/n,概率之和除以n2.概率dp,dp[i]表示播放i的概率,那么可以转换成,dp[i]+=dp[i-j]/n%mod(i>=t[j])3.答案就是x,x-1,...,x-t[1]+1概率之和......
  • UNIQUE VISION Programming Contest 2023 Autumn(AtCoder Beginner Contest 323)
    UNIQUEVISIONProgrammingContest2023Autumn(AtCoderBeginnerContest323)A.WeakBeats解题思路:按题意模拟即可。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;voidsolve(){strings;cin>>s;intn=s.size();......
  • Go - Sorting Arrays or Slices
    Problem: Youwanttosortelementsinanarrayorslice.Solution: Forint,float64,andstringarraysorslicesyoucanusesort.Ints,sort.Float64s,andsort.Strings.Youcanalsouseacustomcomparatorbyusingsort.Slice.Forstructs,youcan......