首页 > 其他分享 >Codeforces Round 734 (Div. 3) 题解

Codeforces Round 734 (Div. 3) 题解

时间:2025-01-12 17:32:21浏览次数:1  
标签:cnt cc 题解 染成 偶数 ge 734 Div c1

建议开题顺序:A,B1,B2,C,E,F,D1,D2。

A. Polycarp and Coins

记 \(k=\min(c1,c2)\),则 \((c1-k)\times 1 +(c2-k)\times 2+k\times 3=n\)。注意到 \(n \mod 3\) 为 \(0,1,2\)。所以我们 \(|c1-c2|\) 最多为 \(1\),只需要将 \(n \mod 3\) 给 \(1\) 或 \(2\) 即可。

B1. Wonderful Coloring - 1

记 \(cnt_i\) 表示 \(s_j=i\) 的数量。那么当 \(cnt_i \ge 2\) 时,我们能在里面随便拿两个,一个染成红色,一个染成绿色。当 \(cnt_i=1\) 时,记一共有 \(x\) 个。那么我们将其中 \(\lfloor \frac{x}{2} \rfloor\) 个染成红色,另外 \(\lfloor \frac{x}{2} \rfloor\) 个染成绿色。很显然剩下的点只能不染色。模拟即可。

B2. Wonderful Coloring - 2

模仿 B1 的思路。当 \(cnt_i \ge k\) 时,选其中 \(k\) 个染成 \(k\) 种颜色。当 \(1\le cnt_i <k\) 时我们将总数记录出来,然后均匀地染色即可。时间复杂度 \(O(n)\)。

代码

 
il void solve(){
	n=rd,k=rd;
	for(re int i=0;i<=n;++i) cnt[i]=0,v[i].clear();
	for(re int i=1;i<=n;++i) ans[i]=0,s[i]=rd,++cnt[s[i]],v[s[i]].push_back(i);
	int c1=0,c2=0;
	for(re int i=1;i<=n;++i)
	if(cnt[i]>=1&&cnt[i]<k){
		c1+=cnt[i];
	}
	for(re int i=n;i>=1;--i)
	if(cnt[i]>=1&&cnt[i]<k){
		if(c1%k!=0) c1-=min(cnt[i],(c1%k));
	}
	int U=1,c_=0;
	for(re int i=1;i<=n;++i)
	if(cnt[i]>=k){
		int cc=0;
		for(auto x:v[i]){
			ans[x]=++cc;
			if(cc==k) break;
		}
	}
	else{
		for(auto x:v[i]){
			if(c_>=c1) break;
			++c_,U++,U%=k;
			if(!U) U=k;
			ans[x]=U;
		}	
	}
	for(re int i=1;i<=n;++i) cout<<ans[i]<<" ";
	cout<<"\n";
   	return ;
}

C. Interesting Story

记 \(f_{i,j}\) 为第 \(i\) 个字符串中 \(s_{k}=j\) 的数量与 \(s_k \ne j\) 的差。那么对于一个字符 \(x\),记我们选择的字符串下标为 \(p_1 \dots p_m\),则:\(\sum\limits_{i=1}^{m} f_{p_i,x} >0\)。暴力枚举最多的字符是哪个,则每次贪心地选 \(f_{i,j}\) 大的,只要和不小于 \(1\) 即可。

D1. Domino (easy version)

暴力分类讨论题。这里我们令 \(m\) 为偶数。如果读入的 \(m\) 为奇数,旋转矩阵即可。如果 \(k=0\),当 \(n\) 为偶数时有解(全构造竖的),否则无解。如果 \(k \ne 0\),我们考虑将前面的若干行填满(因为 \(m\) 为偶数,所以只要数量足够多就可以),记填满了 \(x\) 行,最后剩下 \(y\) 个。当 \(n-x\) 为偶数时,如果 \(y\) 也为偶数,则我们可以构造将 \(\frac{y}{2}\) 个放在第 \(x+1\) 行的前面,其它的放第 \(x+2\) 行的前面,就能保证每一列后面还没填的空为偶数个(每两个放一个竖的就行了);否则无解。当 \(n-x\) 为奇数时,此时我们将第 \(x\) 行的一半放下来,到第 \(x+1\) 行就能保住合法了;否则无解。这里需要注意我们 \(x\ge 1\)。

然后就判断完了。

D2. Domino (hard version)

将 D1 的所有合法情况分别构造即可,但是有点麻烦。

E. Fixed Points

考虑 DP。定义状态函数 \(f_{i,j}\) 表示前 \(i\) 个数,删了 \(j\) 个位置时的最大匹配价值。然后 \(O(n^2)\) 就做完了。

F. Equidistant Vertices

注意到当 \(k>2\) 时我们选出来的点满足:任意两个点的 \(\operatorname{LCA}\) 相同,且距离 \(\operatorname{LCA}\) 的距离相等。然后暴力做背包就行了,时间复杂度 \(O(n^4)\)。

标签:cnt,cc,题解,染成,偶数,ge,734,Div,c1
From: https://www.cnblogs.com/harmisyz/p/18667106

相关文章

  • P5025 [SNOI2017] 炸弹 题解
    题意link.题解我们充分发扬人类智慧。考虑到可能连锁爆炸,我们不能通过一个单纯的二分来解决问题。考虑\(dp\)。记\(f(i)\)为第\(i\)个点爆炸,最远能引爆到哪个坐标小于它的点。\(g(i)\)为第\(i\)个点爆炸,最远能引爆到哪个坐标大于它的点。我们以\(f\)为例,\(g\)......
  • AT_abc388_f Dangerous Sugoroku 题解
    太幽默了。显然可以用矩阵快速幂解决,矩阵里维护距离当前点\(B\)以内的所有点可不可达,转移只需分段,在区间内和不在区间内用不同的转移矩阵即可。复杂度\(O(B^3m\logn)\)。然后你就T了。此时你很急,你现在应该快点卡常来AK这场比赛而不是研究其他的做法,于是我们发现快速幂......
  • vp Codeforces Round 986 (Div. 2)
    A.Alice'sAdventuresin"Chess"题意:你从(0,0)出发,重复固定的移动路径,问能不能经过(a,b)。直接跑一百次就行,因为ab都很小(其实只要跑20次)。点击查看代码voidsolve(){intn,a,b;std::cin>>n>>a>>b;intx=0,y=0;std::strings;std:......
  • Atcoder ABC388F Dangerous Sugoroku 题解 [ 蓝 ] [ 矩阵加速 ] [ 状压矩乘 ] [ 模拟
    DangerousSugoroku:赛时写了矩乘T飞了,受到sunkuangzheng大佬的启发才知道要状压矩乘。暴力矩乘思路直接像过河那样写模拟细节非常多,于是考虑像美食家一样的思路,利用矩阵分段加速。定义\(dp_i\)表示\(i\)能否到达,则有如下转移:\[dp_{i}=\bigvee_{j=i-B}^{i-A}dp_{j}\]......
  • 买房子题解
    【题目要求】问第几年能够买下这套房子。一、建立两个变量,一个表示积攒的钱数,一个表示房价。二、循环20次,判断第i年他能否买下,若能,那么输出i,最后return0。三、在循环外面,输出Impossible。【题解代码】include<bits/stdc++.h>usingnamespacestd;intmain(){double......
  • 整数序列的元素最大跨度值题解
    【题目要求】计算序列的最大跨度值(最大值-最小值)一、求最大值如果a大于最大值,那么最大值就变成a,开始最大值要等于0。二、求最小值如果a小于最小值,那么最小值就变成a,开始最小值要等于1000。【题解代码】include<bits/stdc++.h>usingnamespacestd;intmain(){intn,a,......
  • Atcoder ABC387F Count Arrays 题解 [ 绿 ] [ 基环树 ] [ 树形 dp ] [ 前缀和优化 ]
    CountArrays:一眼秒的计数题。思路显然,把小于等于的条件化为大的向小的连单向边,每个数的入度都是\(1\),就会形成一个基环树森林。那么考虑这个环上能填什么数。因为所有数都小于等于他后面的数,所以所有数都只能相等。这就启发我们在基环树上缩点之后再进行计数。那么当缩完点......
  • 题解:AT_abc388_g [ABC388G] Simultaneous Kagamimochi 2
    鉴于本题解书写时洛谷题面暂无中文翻译,为避免可能的歧义或困惑,先对本题解中的译法进行约定:(顺便吐槽音译怪)英文题面中“mochi”或日文题面中“餅”译为“饼”。英文题面中“kagamimochi”或日文题面中“鏡餅”译为“镜饼”。鉴于本题是C和E的加强版,而我懒得去写那两题的题......
  • 2025/1/11 第25场蓝桥入门赛 题解
    A: 哪来的AC  :  题目链接水题:31画#include<iostream>usingnamespacestd;intmain(){//请在此输入您的代码cout<<31;return0;}B: 酒店安排  : 题目链接 思路:从大到小排序,求每两个相邻房间的差值 ,滑动窗口求m-1个差值最小,即为答案要想最......
  • 题解:P1970 [NOIP2013 提高组] 花匠
    闲话本文同步发布在cnblogs。正题容易发现此题要求花必须一高一低摆放。最优化问题,看不出怎么贪心,遂DP。设计状态\(f_{i,0}\)表示当前为上升形势最长花序列,\(f_{i,1}\)表示当前为下降形势最长花序列。状态转移由于需要一高一低,易得:\[f_{i,0}=\begin{cases}......