首页 > 其他分享 >Codeforces Round 101 (Div. 2) C - E

Codeforces Round 101 (Div. 2) C - E

时间:2023-09-11 18:12:14浏览次数:36  
标签:std 身高 int Codeforces 构造 vis vector Div 101

C. Queue (思维、排序、构造、*1800)

题意:$ n $ 个人排队, 为他们构造一组身高, 使得 $ x $ 的前面有 $ a_i $ 个人比他高。如果无法构造满足所有条件的身高序列, 输出 -1

思路:首先考虑, 对于 $ a_i $ 较大的人, 肯定尽可能地将其往队伍后面放, 然后从后往前构造, 因为只有 $ n $ 个人, 因此, 只需要用 $ 1 \sim n $ 去尝试构造一个身高序列即可。对于队列中的某一个人 $ x $, 前面有 $ a_x $ 个比他高的人, 因此要把 $ n - a_i + 1 \sim n $ 留下来构造他前面且比他高的人的身高。接下来考虑无解情况:对于处于位置 $ i $ 的人, 如果 $ a_i > i - 1 $, 则无解。


点击查看代码
void solve() {
	int n;
	std::cin >> n;
	std::vector<std::pair<int, std::string>> a(n);
	for (int i = 0; i < n; i++) {
		std::cin >> a[i].second >> a[i].first;
	}
	std::sort(a.begin(), a.end());
	std::vector<int> ans(n);
	std::vector<bool> vis(n);
	for (int i = n - 1; i >= 0; i--) {
		if (a[i].first > i) {
			std::cout << "-1\n"; return ;
		}
		for (int j = n - a[i].first; j >= 1; j--) {
			if (!vis[j]) {
				vis[j] = true; ans[i] = j; break;
			}
		}
	}
	for (int i = 0; i < n; i++) {
		std::cout << a[i].second << " " << ans[i] << "\n";
	}
}

标签:std,身高,int,Codeforces,构造,vis,vector,Div,101
From: https://www.cnblogs.com/LDUyanhy/p/17694163.html

相关文章

  • abc288F - Integer Division
    F-IntegerDivision挺有意思的一道题,贪心的做法就是排序之后,逐个加入,如果不能被之前的表示则加入题解证明的话大概是这样考虑第i个数选不选首先加入前面选的数,如果能够表示当前的数,则必然不选否则前面的数不能表示当前的数,假如我们不选\(p_i\)假设最后得到一个合法序列,则......
  • 【题解】Educational Codeforces Round 142(CF1792)
    没有手速,再加上被E卡了,废掉了。A.GamingForces题目描述:Monocarp正在玩电脑游戏。他打算杀死\(n\)个怪兽,第\(i\)个的血量为\(h_i\)。Monocarp的角色有两个魔法咒语如下,都可以以任意顺序用任意次(可以不用),每次使用相当于一次操作。选择两个怪兽并各扣一滴血。选择......
  • Codeforces Global Round 21 B. NIT Destroys the Universe
    给一个长为\(n\)的数组,可以执行以下操作任意次:选择\(l,r(1\leql<r\leqn)\),让\(\foralli(l\leqi\leqr),a_i=mex(\{a_l,a_{l+1},\cdots,a_{r}\})\)。问最小操作数使得\(\foralli,a_i=0\)。观察:答案\(\leq2\),因为对\([1,n]\)操作不超过两次......
  • [GAMES101] 我的结课打卡
    ......
  • Codeforces Round 804 (Div. 2) B. Almost Ternary Matrix
    给两个偶数\(n\)和\(m\)。任务是构造任意一个二进制矩阵,\(n\timesm\)。对于任意\((i,j)\),有且仅有两个邻居的颜色与\(a_{i,j}\)不同。邻居的定义为\(|x-x'|+|y-y'|=1\)。观察:任何\(n\timesm\)的矩阵若作为一个大型矩阵的子矩阵不会受到限制。于是构造......
  • Codeforces Round 807 (Div. 2) B. Mark the Dust Sweeper
    需要打扫\(n\)个房间,第\(i\)个房间有\(a_i\)的积灰。只能使用如下魔法打扫:选择\(i,j,(1\leqi<j\leqn,\min_{k=i}^{j}a_i>0)\)。执行\(a_i=a_i-1,a_j=a_j+1\)。需要将\(1\simn-1\)号房间的积灰全部清空,最少使用多少次魔法。观察一:显......
  • Codeforces Round 811 (Div. 3) A. Everyone Loves to Sleep
    闹钟设有\(n\)个时间点,第\(i\)个时间为\((H_i,M_i)\)。在\(h,m\)时刻入睡,响铃必须起床,问能睡多久。使用\(set<pair<int,int>>\)存储闹铃时刻,然后在其中\(lower_{bound}\)到\(<first\geqh,second\geqm>\)的迭代器\(it\)。若\(it=end\),则\(it=begin......
  • Codeforces Round 819 (Div. 1 + Div. 2) and Grimoire of Code Annual Contest 2022
    给一个长为\(n\)的正整数数组,执行以下操作严格一次。选择\(l,r,(1\leql<r\leqn)\),任意一个正整数\(k\)。重复\(k\)次:让\([l,r]\)的数组成环,按顺时针走一次。希望\(a_n-a_1\)最大,找到这个数。分类讨论题。先判断\(n\)为\(1\)时\(a_n-a_1\)......
  • Codeforces Round 830 (Div. 2) B. Ugu
    给一个\(01\)字符串,需要使它变为非降的,可以执行以下操作:选择一个下标\(i,(1\leqi\leqn)\),\(\forallj\geqi\)的数位翻转。经典的按无后效性翻转问题。考虑从前往后,得到一个全\(0\)串。若开始存在\(1\),则答案减\(1\)。如果存在\(1\),遇到\(1\)便翻转后......
  • $Codeforces Round 891 (Div. 3)$
    \(A.ArrayColoring\)显然需要奇数个偶数即可满足题目。voidsolve(){intn=read(),res=0;for(inti=1;i<=n;i++){intx=read();if(x%2)res++;}puts(res%2==0?"YES":"NO");//puts(ans>0?"Yes":"No&......