首页 > 其他分享 >VP Codeforces Round 978 (Div. 2)

VP Codeforces Round 978 (Div. 2)

时间:2025-01-15 16:15:24浏览次数:1  
标签:std cnt int max cin 978 VP ++ Div

A. Bus to Pénjamo

题意:有n个家庭,每个家庭有\(a_i\)个人,现在有r排座位,每个座位可以坐两个人。如果一个人自己一个坐一个座位或者和自己家庭的人坐一个座位,他就会开心,问所有人都入座后最多有多少人开心。

我们肯定尽量让一个座位坐两个同一家庭的人,这样一个座位可以让两个人开心。考虑每个家庭落单人数和为cnt,并且还剩下m个座位,我们应该尽量让一个人坐一个位置,设有x个位置坐两个人,y个位置坐一个人,如果$m $$\geqslant$$ cnt $,则直接让所有人一个人坐一个座位,否则有 \(2x\) + \(y\) = cnt, \(x\) + \(y\) = m。解得\(x = cnt - m\),\(y = cnt - 2 * (cnt - m)\)

点击查看代码
void solve() {
    int n, m;
    std::cin >> n >> m;
    std::vector<int> a(n);
    for (int i = 0; i < n; ++ i) {
    	std::cin >> a[i];
    }

    int cnt = 0, ans = 0;
    for (int i = 0; i < n; ++ i) {
    	cnt += a[i] % 2;
    	ans += a[i] / 2;
    }

    m -= ans;
    cnt -= std::max(0, 2 * (cnt - m));
    std::cout << ans * 2 + cnt << "\n";
}

B. Kar Salesman

题意: 有n种类型的车, 每种类型的车有\(a_i\)辆, 一个顾客可以最多买\(x\)辆不同的车, 最少需要几个顾客才能买完所有车?

这x搞个小于等于10, 开始我还以为是什么模拟题.
顾客数至少为\(max(a)\), 不然有一种车不可能卖完.
顾客数至少为\(\lceil \frac{\sum_{i=1}^{n} a_i}{x} \rceil\), 因为假设每个顾客都能买\(x\)个,那么这是最少的购买次数.
那么答案就是上面两个的最大值, 因为最大值同时满足这两个的最少顾客数,并且已经是满足条件的顾客数里最小的了. 我们想象有一个有这个最大值行x列的矩阵,每个顾客一行一行的放车, 因为这个矩阵格子数一定大于等于总车辆数, 一定能放完, 并且恰好放到最后一行. 再少一行都不行.

点击查看代码
void solve() {
    int n, x;
    std::cin >> n >> x;
    std::vector<i64> a(n);
    for (int i = 0; i < n; ++ i) {
    	std::cin >> a[i];
    }
    
    i64 sum = 0, max = 0;
    for (int i = 0; i < n; ++ i) {
    	sum += a[i];
    	max = std::max(max, a[i]);
    }

    std::cout << std::max(max, (sum + x - 1) / x) << "\n";
}

C. Gerrymandering

题意: 有一个\(2\)行\(n\)列的矩阵, 每个格子上的人要么投票给a, 要么投票给b, 你要给他们分成\(\frac{2n}{3}\)个块内格子数为\(3\)的联通块, 每个联通块如果有两个以上人投票给a, 那么这个连通块就会投票给a, 你要让a获得最大票数.

考虑dp, \(f[i][j]\), \(j \in \{-1, 0, 1\}\)表示第一行填到第i个位置时, 第二行填到的位置j的 i - j, 那么我们就可以考虑每种情况可以转移. 我们如果给第一行三个一起填, 那么第二行也一定是三个一起跟着填, 其他情况画图就懂了.

点击查看代码
void solve() {
	int n;
	std::cin >> n;
	std::vector<std::string> s(2);
	for (int i = 0; i < 2; ++ i) {
		std::cin >> s[i];
	}

	auto get = [&](int a, int b, int c, int d, int e, int f) -> int {
		return (s[a][b] == 'A') + (s[c][d] == 'A') + (s[e][f] == 'A') >= 2;
	};

	std::vector f(n + 1, std::vector<int>(3, -1e9));
	const int D = 1;
	f[0][0 + D] = 0;
	for (int i = 0; i < n; ++ i) {
		//f[i][-1]
		//1 0
		//0 0
		if (i && i + 3 < n) {
			f[i + 3][-1 + D] = std::max(f[i + 3][-1 + D], f[i][-1 + D] + 
					get(0, i, 0, i + 1, 0, i + 2)) + get(1, i - 1, 1, i, 1, i + 1);
		}

		if (i && i + 1 <= n) {
			f[i + 1][0 + D] = std::max(f[i + 1][0 + D], f[i][-1 + D] + get(0, i, 1, i - 1, 1, i));
		}

		//f[i][0]
		//1 0
		//1 0
		if (i + 3 <= n) {
			f[i + 3][0 + D] = std::max(f[i + 3][0 + D], f[i][0 + D] + 
					get(0, i, 0, i + 1, 0, i + 2) + get(1, i, 1, i + 1, 1, i + 2));
		}

		if (i + 1 < n) {
			f[i + 1][1 + D] = std::max(f[i + 1][1 + D], f[i][0 + D] + get(0, i, 1, i, 1, i + 1));
		}

		if (i + 2 < n) {
			f[i + 2][-1 + D] = std::max(f[i + 2][-1 + D], f[i][0 + D] + get(0, i, 0, i + 1, 1, i));
		}

		//f[i][1]
		//1 0
		//1 1
		if (i + 3 < n) {
			f[i + 3][1 + D] = std::max(f[i + 3][1 + D], f[i][1 + D] + 
					get(0, i, 0, i + 1, 0, i + 2) + get(1, i + 1, 1, i + 2, 1, i + 3));
		}
		if (i + 2 <= n) {
			f[i + 2][0 + D] = std::max(f[i + 2][0 + D], f[i][1 + D] + get(0, i, 0, i + 1, 1, i + 1));
		}
	}

	std::cout << f[n][0 + D] << "\n";
}

D1. Asesino (Easy Version)

待补

标签:std,cnt,int,max,cin,978,VP,++,Div
From: https://www.cnblogs.com/maburb/p/18673239

相关文章

  • CF div2 990(A~E)
    VP赛时\(4\)题,发挥得比较不错的一场,并且这场也偏简单。A数数题,找好规律直接模拟即可codeB简单排列组合题显然总方案数为:\[n!/(a_1!*a_2!*...*a_m!)\]\(a_1到a_m\)表示某种字符的数量想最小化总方案数,只能最大化上式分母的值。而题目操作等价于将某个\(a_i\)减......
  • 【VPX303】基于 3U VPX 总线架构的双银河飞腾 FT-M6678 DSP 信号处理平台(100%全国产化
    ​产品概述VPX303是一款基于3UVPX总线架构的高性能信号处理板,板载2片国防科大银河飞腾FT-M6678多核浮点运算DSP,可以实现各种实时性要求较高的信号处理算法。板卡每个DSP均支持5片DDR3SDRAM实现数据缓存,两片DSP之间通过X4SRIO进行互联。每个DSP均引出1路......
  • NLP论文速读(ICML 2024)|通过人的反馈实现质量多样性(Quality Diversity through Human F
    论文速读|QualityDiversitythroughHumanFeedback:TowardsOpen-EndedDiversity-DrivenOptimization论文信息:简介:   本文的背景主要涉及两个领域:强化学习从人类反馈(ReinforcementLearningfromHumanFeedback,RLHF)和质量多样性(QualityDiversity,QD)算法......
  • Codeforces Round 992 (Div. 2) C题解析
    CodeforcesRound992(Div.2) C题解析题目描述......
  • ryujin 1.2.78下载(龙神模拟器),配置19.0的key和对应固件,解决amiibo API错误(需要翻墙vpn)
    1.下载不废话Release1.2.78·Ryubing/Ryujinx·GitHub,找对应的版本下载下载后解压得到publish文件夹,打开里面的Ryujinx.exe,会报错,别管先挂着,接着看步骤22.配置switch的key和固件推荐(不用vpn):下面步骤2.1和2.2 key和固件的下载要使用vpn,你可以直接用夸克打开下面......
  • My CVPR Learning-Feedback
    2024视觉-语言 EfficientVision-LanguagePre-trainingbyClusterMasking图像包含大量冗余信息,这使得从图像中高效学习表示变得具有挑战性,提出了一种在视觉-语言对比学习过程中对图像块进行聚类掩蔽的策略论文方法:随机聚类掩蔽:在训练过程中,随机选择图像块作为聚类中......
  • CF ROUND 847(Div3)
    B告诉你所有元素和,以及拿走一个最大值的剩余元素和,构造原序列。首先肯定有一个元素是最大值,剩下的就是构造一个最大值不超过某个值的,和为定值的序列。最简单的构造方式就是元素和均分,这样可以让最大元素尽量小,肯定不会超过最大值的限制voidsolve(){ cin>>n>>m>>k; int......
  • VP Educational Codeforces Round 159 (Rated for Div. 2)
    A.BinaryImbalance题意:给你一个01串,每次选一个01或者一个10在他们中间插一个0进去,问能不能让0的个数大于1。我们进行一次插入操作后,显然还可以继续操作,所以只要有0和1就一定可以。注意特判全0的情况。点击查看代码voidsolve(){ intn; std::cin>>n; std::s......
  • CF div2 992(A~E)
    VP赛时三题。被AB题卡炸了,C题反倒发挥正常,D题可惜只想到了一半A没发现数据范围很小可以暴力+题干减号看成了加号,导致创造了二十多分钟才过A题的新纪录(codeB贪心or找规律,也是牢了一会儿。显然要贪心地创造出能用上第二个操作的情景。所以从\(1\)位置出发,每次在右侧找一个......
  • Codeforces Round 996 (Div. 2) (A - C)
    A题链接:https://codeforces.com/contest/2055/problem/a题意:两个人Alice和Bob初始位置分别位a,b,n为长度大小,Alice先手选择一个方向前进,两人位置不重叠且一次走一格,谁不能走谁输解题思路:看他们两个谁先不能朝着对方位置前进,即为输voidsmoking(){  intn,a,b;  ......