首页 > 其他分享 >Codeforces Round 970 (Div. 3)(VP)

Codeforces Round 970 (Div. 3)(VP)

时间:2024-09-03 10:26:02浏览次数:11  
标签:even 970 int max sum VP auto Div odd

A. Sakurako's Exam

总结:一看n <= 20,直接暴力+剪枝即可

inline void solve(){
	int a, b;
	cin >> a >> b;

	vector<int> d;
	d.reserve(a + b);
	while (a --) {
		d.push_back(1);
	}
	while (b --) {
		d.push_back(2);
	}

	auto dfs = [&](auto&& self, int idx, int sum) ->bool{
		if (idx == (int)d.size()) {
			return sum == 0;
		}
		return self(self, idx + 1, sum + d[idx] * 1) || self(self, idx + 1, sum + d[idx] * -1);
	};

	cout << (dfs(dfs, 0, 0) ? "YES" : "NO") << '\n';
}

B. Square or Not

总结:模拟遍历一遍即可,判断首末行单独判断

inline void solve(){
	int n;
	cin >> n;

	string s;
	cin >> s;

	if (!mapp[n]) {
		cout << "No\n";
		return;
	}

	int length = mapp[n];

	bool ok = true;
	for (int i = 0; i < n / length; ++i) {
		bool is_one = (!i || (i == (n / length) - 1));
		auto cur = s.substr(i * length, length);
		if (cur[0] != '1' || cur.back() != '1') {
			ok = false;
			break;
		}
		auto cnt = count(cur.begin(), cur.end(), '1');
		if (is_one) {
			if (cnt != length) {
				ok = false;
				break;
			}
		}
		else {
			if (cnt != 2) {
				ok = false;
				break;
			}
		}
	}

	cout << (ok ? "Yes\n" : "No\n");

}

C. Longest Good Array

总结:依然是暴力破解,就是看一个最大终止数值的问题(要求求和<=dif)

inline void solve(){
	long long a, b;
	cin >> a >> b;

	long long dif = (b - a);

	long long l = 0, r = dif;

	auto valid = [dif](long long x) {
		return x * (x + 1) / 2 <= dif;
	};
	while (l < r) {
		long long mid = (l + r + 1) >> 1;
		if (valid(mid))  {
			l = mid;
		}
		else {
			r = mid - 1;
		}
	}

	cout << (l + 1) << '\n';
}

D. Sakurako's Hobby

总结:求出连通分量即可,因为是permutaton数组,所以保证每个点一定在一个环中,具体的tarjan代码参考我的github,有用请点star
https://github.com/yxc-s/programming-template/blob/master/Graph/Tarjan.cpp

 inline void solve(){
	int n;
	cin >> n;

	vector<vector<int>> al(n + 1);
	for (int i = 1; i <= n; ++i) {
		int v;
		cin >> v;
		al[i].push_back(v);
	}

	auto circles = Tarjan::getScc(al);

	string s;
	cin >> s;

	vector<int> ans(n + 1);
	for (const auto& cur : circles) {
		int cnt = 0;
		for (const auto& x : cur) {
			cnt += s[x - 1] == '0';
		}
		for (const auto& x : cur) {
			ans[x] = cnt;
		}
	}

	for (int i = 1; i <= n; ++i) {
		cout << ans[i] << " \n"[i == n];
	}

}

E. Alternating String

总结:分奇偶两种情况讨论,奇数的话就依次考虑移除当前数的最小代价(需要维护一个前缀和后缀奇偶各个字符出现的次数)
偶数的话就直接计算

inline void solve(){
int n;
cin >> n;

string s;
cin >> s;

int ans = 0x3f3f3f3f;
if (n & 1) {
    vector<vector<vector<int>>> pref(n, vector<vector<int>> (2, vector<int>(26, 0)));
    auto suff = pref;
    for (int i = 1; i < n; ++i) {
        pref[i] = pref[i - 1];
        pref[i][(i + 1) & 1][s[i - 1] - 'a'] ++;
    }
    for (int i = n - 2; i >= 0; --i) {
        suff[i] = suff[i + 1];
        suff[i][(i + 1) & 1][s[i + 1] - 'a'] ++;
    }
    for (int i = 0; i < n; ++i) {
        int sum_odd = 0;
        int sum_even = 0;
        int max_odd = 0;
        int max_even = 0;
        int par = (i + 1) & 1;
        for (int j = 0; j < 26; ++j) {
            max_odd = max({max_odd, pref[i][1][j] + suff[i][0][j]});
            max_even = max({max_even, pref[i][0][j] + suff[i][1][j]});
            sum_odd += pref[i][1][j] + suff[i][0][j];
            sum_even += pref[i][0][j] + suff[i][1][j];
        }
        ans = min(ans, sum_odd - max_odd + sum_even - max_even + 1);
    }
}
else {
    array<int, 26> odd = {};
    array<int, 26> even = {};
    for (int i = 0; i < n; ++i) {
        auto& cur = (i + 1) & 1 ? odd : even;
        cur[s[i] - 'a'] ++;
    }
    ans = accumulate(odd.begin(), odd.end(), 0) - *max_element(odd.begin(), odd.end()) + 
        accumulate(even.begin(), even.end(), 0) - *max_element(even.begin(), even.end());
}

cout << ans << '\n';

}

标签:even,970,int,max,sum,VP,auto,Div,odd
From: https://www.cnblogs.com/yxcblogs/p/18394072

相关文章

  • Codeforces Round 968 (Div. 2)
    vp的,老规矩跳过abC:根据题意我们知道三个不一样的字母连续放一定可以,然后观察样例发现好像把两个不同的字母轮流放也可以。进一步猜测(瞎猜的)发现这个好像只要把不同的挨个放进去就行了(本来以为可能要按数量排序但是似乎根本不用),最后剩下的全放一起也没事。然后就过了。#includ......
  • Codeforces Round 970 div3
    CodeforcesRound970div3错过的一场比赛,第二天早晨VP,题目的通过率还挺奇怪A.Sakurako'sExamhttps://codeforces.com/contest/2008/problem/A题意:有a个1和b个2的数组,在1和2前面增添加减号,判断是否能让结果为0思路:1个2需要2个1进行填补,不如先让2自己进行消去,如......
  • 华为防火墙SSL_VPN异地登录报警
    华为防火墙SSL_VPN异地登录报警脚本功能此Python脚本的主要功能是从Elasticsearch中检索登录成功的日志,检查用户的登录信息是否发生变化,并将相关信息存储到MySQL数据库中。如果检测到用户的登录IP地址或地理位置发生变化,则发送钉钉通知警告。如不知道es如何采集华为防火......
  • LaViT:这也行,微软提出直接用上一层的注意力权重生成当前层的注意力权重 | CVPR 2024
    Less-AttentionVisionTransformer利用了在多头自注意力(MHSA)块中计算的依赖关系,通过重复使用先前MSA块的注意力来绕过注意力计算,还额外增加了一个简单的保持对角性的损失函数,旨在促进注意力矩阵在表示标记之间关系方面的预期行为。该架构你能有效地捕捉了跨标记的关联,超越了基线......
  • Codeforces Round 969 Div.2+Div.1
    A.Dora'sSet注意到任意两个偶数的\(\gcd\)都大于\(1\),因此选择的三个数中至多一个偶数,而注意到相邻的奇数一定互质,因此每次选两个奇数一个偶数,答案=奇数的个数÷2点击查看代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#defineullunsigned......
  • Codeforces Round 969 (Div. 2)
    ab题没啥好说的,b题一开始看题错成线段树了,后面发现维护最大值就过了(我就说b怎么会有线段树)。。。C:DoraandC++卡的我死死的,好久没卡c了,数论果然是最短板。。。我有两个推论,但是一个都不会用:1.翡蜀定理。(但是这题只有正数)(处理两个数的情况)2.断环为链。(但是我只会n方,即以每个......
  • YOLOv8改进 | 模块缝合 | C2f融合卷积重参数化OREPA【CVPR2022】
    秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转......
  • Diffusion反馈强势助力CLIP秒变火眼金睛:北京智源研究院、中科院自动化所联合推出DIVA
    前言 本文分享论文DiffusionFeedbackHelpsCLIPSeeBetter,专注于通过自监督学习范式解决CLIP无法区分细粒度视觉细节的问题。欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。本文转载自我爱计算机视觉仅用于学术分享,若侵权......
  • 使用devpi-server搭建pypi本地缓存服务器
    使用缓存机制可以显著减少对外部源的请求量,从而提高下载速度,并降低被源站封禁的风险。下面详细解释如何在本地服务器上设置和使用pip缓存机制。缓存机制的基本原理缓存机制的原理是在本地服务器上保存已经下载过的Python包,当其他服务器请求同样的包时,本地服务器可以直接提供,......
  • [WPF]数据绑定时为何会出现StringFormat失效VPqCe7cCvg7iTH0g
    在数据绑定过程中,我们经常会使用StringFormat对要显示的数据进行格式化,以便获得更为直观的展示效果,但在某些情况下格式化操作并未生效,例如Button的Content属性以及ToolTip属性绑定数据进行StringFormat时是无效的。首先回顾一下StringFormat的基本用法。StringFormat的用法Str......