首页 > 编程语言 >Codeforces Round 963 (Div. 2) A - C 详细题解(思路加代码,C++,Python) -- 来自灰名小白的独特理解

Codeforces Round 963 (Div. 2) A - C 详细题解(思路加代码,C++,Python) -- 来自灰名小白的独特理解

时间:2024-08-05 21:52:27浏览次数:15  
标签:max val 963 Python 题解 cin int res ev

比赛链接:

Dashboard - Codeforces Round 963 (Div. 2) - Codeforces

之后有实力了再试试后面的题目,现在要做那些题,起码要理解一个多小时

题目A:

链接:

Problem - A - Codeforces

题目大意理解:

        极少数不考翻译能读懂的cf题目(bushi)

每个测试用例第一行一个n,第二行一个只含有ABCD和?的字符串,长度为4n
第二行的字符串表示答题卡上面的选项,问号表示没选

然后每个选项最多只有n个是对的

然后输出这个答题卡中最多有多少个正确答案

比如输入
5

ACADC??ACAC?DCAABC?C

一共有 6个 A, 一个B, 7个C, 2个D

由于每个选项最多只有n个是对的,此时就是5个
那么最大值就是 5 + 1 + 5 + 2 = 13

输出
13

思路:

上面示例已经写出来了,直接统计每个字母的数目,然后大于n答案就加上n,如果小于n就全部加上,注意?这个,要么在统计的时候排除,要么在遍历的时候排除


代码(C++):

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int t;
	cin >> t;
	while (t--){
		int n;
		cin >> n;
		string s;
		cin >> s;
		unordered_map<int, int> map;
		int res = 0;
		for (auto& c : s){
			map[c] += 1;
		}
		for (auto& [key, val] : map){
			if (key != '?'){
				if (val >= n){
					res += n;
				}else{
					res += val;
				}
			}
		}
		cout << res << '\n';
	}
    return 0;
}

代码(Python):

def main():
	t = II()
	res = []
	for _ in range(t):
		n = II()
		s = I()
		hash_map = defaultdict(int)
		for c in s:
			if c != '?':
				hash_map[c] += 1
		r = 0
		for v in hash_map.values():
			if v >= n:
				r += n
			else:
				r += v
		res.append(r)
	for r in res:
		print(r)

题目B:

很好的一个思维题,文字描述这么少,我竟然能两次把题目意思理解错

链接:

Problem - B - Codeforces

题目大意理解:

输入一列数字,你可以选择两个奇偶性不同的数进行操作

然后两个数字中的那个数字替换成两个数字的和

最后操作结果是保证这一列数字奇偶性相同

输出最小操作次数

思路:

注意题目条件:两个数字中的那个数字替换成两个数字的和

一个奇数加上一个偶数肯定是变成奇数的,那么就变换偶数即可


不管奇数偶数数量怎么样,都必须把所有的偶数变成奇数

那么答案肯定大于等于偶数的数量,可以定义res = ev.size()

对偶数的集合进行排序,遍历偶数集合并且不断更新奇数中的最大值

如果出现: 此时偶数中的值大于此时奇数中的最大值

答案加上一即可(把最大的偶数替换一次即可)


代码(C++):

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int t;
	cin >> t;
	while (t--){
		int n;
		cin >> n;
		vector<int> odd, ev;
		for (int i = 0; i < n; i++){
			int x;
			cin >> x;
			if (x % 2){
				odd.push_back(x);
			}else{
				ev.push_back(x);
			}
		}
		if (!odd.size() || !ev.size()){
			cout << 0 << '\n';
			continue;
		}
		long long val = 0;
		int res = ev.size();
		for (auto& x : odd){
			val = max((long long)x, val);
		}
		sort(ev.begin(), ev.end());
		for (auto& x : ev){
			if (x > val){
				res++;
				break;
			}
			val += x;
		}
		cout << res << '\n';
	}
    return 0;
}

代码(Python):

def main():
	t = II()
	res = []
	for _ in range(t):
		n = II()
		arr = LII()
		ev = []
		odd = []
		for x in arr:
			if x % 2:
				odd.append(x)
			else:
				ev.append(x)
		if len(ev) == 0 or len(odd) == 0:
			res.append(0)
			continue
		max_val = 0
		for x in odd:
			max_val = max(x, max_val)
		r = len(ev)
		ev.sort()
		for x in ev:
			if x > max_val:
				r += 1
				break
			max_val += x	
		res.append(r)
	
	for r in res:
		print(r)

题目C:

题目意思感觉还是很好理解,但是想起来就很复杂了

链接:

Problem - C - Codeforces

题目大意理解:

每个测试用例第一行输入两个数n, k,表示房间的个数和芯片的周期数

第二行有n个不同的整数,表示芯片安装的时刻

开始所有房间的灯都是熄灭的,然后依次安装芯片,周期地控制灯的开关,芯片一旦安装上去,就会先开k分钟的灯,关k分钟的灯,然后这个周期下去

求最早一个时刻,所有灯都是亮的,如果没有就输出-1

思路:

首先明确一点,当所有的芯片安装完成后,才有可能所有的灯会亮

可以求出芯片安装时刻的最大值max_val

然后就是芯片装好一瞬间就会亮,周期是2k,

现在需要考虑的就是每一个芯片安装时刻到所有装完(max_val)这一段时间是否满足在k内即可


代码(C++):

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int t;
    cin >> t;
    while (t--) {
        int n, k;
        cin >> n >> k;
        vector<int> a(n);
        int maxVal = 0;
        for (int i = 0; i < n; ++i) {
            cin >> a[i];
            maxVal = max(maxVal, a[i]);
        }
        int l = 0, r = k - 1;
        for (int i = 0; i < n; ++i) {
            int x = (maxVal - a[i]) % (2 * k);
            if (x == k) {
                l = r + 1;
                break;
            }
            if (x < k) {
                r = min(r, k - x - 1);
            }
            if (x > k) {
                l = max(l, 2 * k - x);
            }
        }
        if (l > r){
            cout << -1 << "\n";
        }
        else{
            cout << maxVal + l << '\n';
        }
    }
    return 0;
}

代码(Python):

def main():
	t = II()
	res = []
	for _ in range(t):
		n, k = MII()
		a = LII()
		max_val = max(a)
		l, r = 0, k - 1
		
		for i in range(n):
			x = (max_val - a[i]) % (2 * k)
			if x == k:
				l = r + 1
				break
			if x < k:
				r = min(r, k - x - 1)
			else:
				l = max(l, 2 * k - x)
		if l > r:
			res.append(-1)
		else:
			res.append(max_val + 1)
			
	for r in res:
		print(r)

标签:max,val,963,Python,题解,cin,int,res,ev
From: https://blog.csdn.net/2401_83669813/article/details/140932485

相关文章

  • 【Playwright+Python】系列教程(七)使用Playwright进行API接口测试
    playwright也是可以做接口测试的,但个人觉得还是没有requests库强大,但和selenium相比的话,略胜一筹,毕竟支持API登录,也就是说可以不用交互直接调用接口操作了。怎么用既然是API的测试了,那肯定就别搞UI自动化那套,搞什么浏览器交互,那叫啥API测试,纯属扯淡。也不像有些博主更懒,直接贴......
  • P4604 [WC2017] 挑战 题解
    题目描述任务一给定\(n\)个\(32\)位无符号整数,将它们从小到大排序。任务二有\(2n\)个人玩"石头剪刀布"游戏,他们分成两排,每排\(n\)个人,\(a_{i,j}=0/1/2\)分别表示第\(i\)排第\(j\)人出石头、剪刀、布。\(q\)次询问,每次给定\(x,y,l\),询问第一排第\(x\simx......
  • CF228E 题解
    CF228E题解题目简述给定一个\(n\)个点,\(m\)条边的无向图,每条边都为\(0\)或\(1\),可以进行若干次操作,与此点相连的所有点权值取反,求一种方案使得所有边都变为\(1\)。前置知识二分图二分图染色思路简述首先明白一点:对于同一条边,操作偶数次是没有必要的!因为最终会回......
  • Mojo中集成Python详解及问题说明
    官方的长期目标是让Mojo成为Python的超集(即让Mojo与现有的Python程序兼容)。Python程序员应该能够立即使用Mojo,并能够访问当今庞大的Python包生态系统。然而,Mojo仍处于早期开发阶段,许多Python功能尚未实现。目前,您无法在Mojo中编写所有可以用Python编写的......
  • [Violet 6]故乡的梦 题解
    前言题目链接:Hydro&bzoj。题意简述无向联通图给出起点终点,多次询问删边后最短路,或报告不连通。\(n,m,q\leq2\times10^5\)。题目分析首先想到,如果删掉的边不是原来最短路的边,那么最短路不会发生变化。因此我们只需考虑删除了原来在最短路上的边。不妨把原先最短路任......
  • 洛谷-P9830 题解
    思路分析分析样例:见红线,长宽各为2,存在格点;黄线长2宽3,没有格点。考虑延长黄线使得长4宽6,发现有格点。思考格点,如果长和宽都可以被分成\(p\timesl\)的格式,则存在格点。那么,就能想出:推论1:对于\((0\,\0)\)和\((x\,\y)\)之间没有格点,当且仅当\(\gcd(x\,......
  • P9596 冒泡排序 2 题解
    题目链接。Statement记\(f(A)\)为序列\(A\)的冒泡排序趟数,操作:单点改,全局查\(f(A)\).\(n,m\le5\cdot10^5\),值域1e9.Solution结论:\[Ans=\max_{i\in[1..n]}\left\{\sum_{j\in[1..i]}[A_j>A_i]\right\}\]怎么观察出来啊QAQ证明:对于每个位置\(p\),观察到每趟都......
  • python图表没有正确显示中文,这通常是因为matplotlib的默认设置不支持中文字符,或者相应
    如果图表没有正确显示中文,这通常是因为matplotlib的默认设置不支持中文字符,或者相应的字体没有正确加载。你可以通过指定支持中文的字体来解决这个问题。下面是如何设置matplotlib以确保能够在图表中显示中文的步骤:方法1:全局设置字体你可以修改matplotlib的全局配置,使......
  • 在python jupyter下运行cuda c++程序
    Installrunthisonjupyter(*.ipynb)files!pip3installnvcc4jupyterUsageloadtheextensiontoenablethemagiccommands:%load_extnvcc4jupyterRuncudatest%%cuda#include<stdio.h>__global__voidhello(){printf("Hellofromblock......
  • AGC046C 题解
    blog。好菜啊,不会这题,来写个题解/kel。很难直接做,先找一点性质:操作只改变相对顺序,而总数不变。这启示我们记录每个\(0\)前面的极长\(1\)连续段长度。记第\(i(1\lei\leC)\)个\(0\)对应长度为\(a_i\),就存在下面的等价表述:每次操作可以选定\(i,j(1\lei<j\leC)\),......