首页 > 其他分享 >The 3rd Universal Cup. Stage 16: Nanjing

The 3rd Universal Cup. Stage 16: Nanjing

时间:2024-11-10 14:08:56浏览次数:1  
标签:cnt 3rd 16 int vi Universal back ++ using

B. Birthday Gift

把原始串的偶数位取反,题目从消除相同就可以转换为消除不同。因此只要有不同位,就一定可以消除。因此最终剩下的串一定是全 0 或者全 1。因此答案就是翻转后的 1、0 之差。我们用 2 尽可能的减少0,1 只差即可。

#include <bits/stdc++.h>

#define ll long long

void solve() {
	std::string s;
	std::cin >> s;

	int cnt0 = 0, cnt1 = 0, cnt2 = 0;
	for(int x, y = 0; auto c : s) {
		x = c - '0';
		if(x == 2) cnt2 ++;
		else {
			x ^= y;
			if(x == 0) cnt0 ++;
			else cnt1 ++;
		}
		y ^= 1;
	}
	int ans = abs(cnt0 - cnt1) - cnt2;
	if(ans < 0) ans = (-ans) % 2;
	
	std::cout << ans << "\n";
	return;
}

int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);

	int t;
	std::cin >> t;

	while (t--){
		solve();
	}


	return 0;
}

E. Left Shifting 3

循环位移只能把首尾连起来。额外计算一下首尾拼起来能不能构成nanjing

#include <bits/stdc++.h>

using namespace std;


using i32 = int32_t;
using i64 = long long;


using vi = vector<int>;
using pii = pair<int,int>;

const string t = "nanjing";

void solve() {
	int n, k;
	cin >> n >> k;

	string s;
	cin >> s;

	int res = 0;
	for(int i = 0; i + 6 < n; i ++) 
		if(s.substr(i, 7) == t) res ++;

	for(int i = 1; i <= min(k, 6) and n >= 7; i ++){

		if(s.substr(n - 7 + i, 7 - i) + s.substr(0, i) == t) {
			res ++;
			break;
		}
	}

	cout << res << "\n";
	return;
}

i32 main() {
	ios::sync_with_stdio(false), cin.tie(nullptr);
	int T;
	cin >> T;
	while(T --)
		solve();
	return 0;
}

J. Social Media

一条评论,可以当成一条无向边。边一共有三种。

  1. 两个端点都被选择
  2. 一个端点被选择
  3. 两端点都没有被选择

对于第一种边直接累计到到答案中,对于第二种边统计没有被选择的边链接了多少条边,对于第三种边,加入到图中。

多选点不会使得答案更差。因此一定要选两个点。

首先我们枚举第一点个,第一个被选择后,第二种边就会转换为第一种边。第一个点所连接的第三种边都会转换为第二种边。对于第二个点,贪心的选择 第二种边最多的。

#include <bits/stdc++.h>

using namespace std;


using i32 = int32_t;
using i64 = long long;


using vi = vector<int>;
using pii = pair<int,int>;

void solve() {
	int n, m, k;
	cin >> n >> m >> k;
	vector<bool> selected(k + 1);
	for(int i = 1, x; i <= n; i ++) {
		cin >> x;
		selected[x] = true;
	}

	int ans = 0;
	vi cnt(k + 1), cnt2(k + 1);
	vector<vi> e(k + 1);
	for(int i = 1, x, y; i <= m; i ++) {
		cin >> x >> y;
		if(selected[x] and selected[y]) ans ++;
		else if(selected[x]) cnt[y] ++;
		else if(selected[y]) cnt[x] ++;
		else if(x == y) cnt[x] ++;
		else e[x].push_back(y), e[y].push_back(x);
	}

	int max1 = 1, max2 = 2;
	if(cnt[max2] > cnt[max1]) swap(max1, max2);

	for(int i = 3; i <= k; i ++) {
		if(cnt[i] > cnt[max1] ) max2 = max1, max1 = i;
		else if(cnt[i] > cnt[max2]) max2 = i;
	}

	int res = 0;

	for(int i = 1, ret; i <= k; i ++) {
		if(selected[i]) continue;
		if(i == max1) ret = max2;
		else ret = max1;


		for(auto y : e[i]) { 
			cnt2[y] ++;
			if(cnt[y] + cnt2[y] > cnt[ret] + cnt2[ret]) ret = y;
		}

		res = max(res, cnt[i] + cnt[ret] + cnt2[ret]);

		for(auto y : e[i]) cnt2[y] = 0;
	}

	cout << ans + res << "\n";
}

i32 main() {
	ios::sync_with_stdio(false), cin.tie(nullptr);

	int T;
	cin >> T;
	while(T --)
		solve();

	return 0;
}

K. Strips

按照黑色点分段。分段对坐标进行映射到 1 到 n。

我们从左到右,贪心的选择最靠右的区间。这样一定可以保证使用区间数量最少。

然后我们检查最右侧的区间是否越界。如果越界就要把最右侧的区间的和有段点对齐。对齐后如果左侧碰到了区间就要逐个把区间向左推。如果最左侧的区间依旧越界,就是无解。否则就是一种答案。

#include <bits/stdc++.h>

using namespace std;


using i32 = int32_t;
using i64 = long long;

#define int i64

using vi = vector<int>;
using pii = pair<int,int>;

void solve() {
	int n, m, k, w;
	cin >> n >> m >> k >> w;

	vi r(n);
	for(int i = 0; i < n; i ++) 
		cin >> r[i];
	
	vi b(m);
	for(int i = 0; i < m; i ++) 
		cin >> b[i];

	b.push_back(0), b.push_back(w + 1);
	ranges::sort(r);
	ranges::sort(b);

	auto calc = [k](int n, vi a) -> vi {
		vi l , r;

		for(auto i : a) {
			if(r.empty() or i > r.back()){
				l.push_back(i);
				r.push_back(i + k - 1);
			}
		}

		int R = n;
		for(int i = l.size() - 1; i >= 0; i --) {
			if(r[i] <= R) break;
			r[i] = R;
			l[i] = R - k + 1;
			R = l[i] - 1;
		}
		
		if(l[0] >= 1) return l;
		else return vi();
	};

	vi res, cur;
	for(int i = 0, j = 0; i + 1 < b.size() and j < n; i ++) {
		cur = vi();
		while(j < n and b[i] < r[j] and r[j] < b[i + 1])
			cur.push_back(r[j] - b[i]), j ++;
		if(cur.empty()) continue;


		auto ret = calc(b[i + 1] - b[i] - 1, cur);
		if(ret.empty()) {
			cout << -1 << "\n";
			return;
		}
		for(auto x : ret)
			res.push_back(x + b[i]);
	}

	cout << res.size() << "\n";
	for(auto i : res) assert(1 <= i <= w - k + 1 ), cout << i << " ";
	cout << "\n";
	return;
}

i32 main() {
	ios::sync_with_stdio(false), cin.tie(nullptr);

	int T;
	cin >> T;
	while(T --)
		solve();

	return 0;
}

标签:cnt,3rd,16,int,vi,Universal,back,++,using
From: https://www.cnblogs.com/PHarr/p/18537887

相关文章

  • 2024-2025-1 20241316 《计算机基础与程序设计》第七周学习总结
    2024-2025-120241316《计算机基础与程序设计》第七周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第七周作业这个作业的目标<数组与链表基于数组和基于链表实现数据结构无序表与......
  • http://192.168.1.1/ http://3232235777/
    提供的两个链接分别是:http://192.168.1.1/http://3232235777/1. http://192.168.1.1/ ——IP地址表示法(点分十进制)这是一个典型的IPv4地址,表示一个私有局域网(LAN)地址。IPv4地址由四个字节(32位)组成,每个字节的范围是从0到255。表示方法是将每个字节用点(.)分隔开,并使......
  • Unity类银河战士恶魔城学习总结(P116 Thunder Strike Item Effec 制作一把发出闪电的剑
    【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/本节实现了一把带雷电攻击的剑,我取名为雷电一心TunderStrike_Effect.cs实现逻辑通过继承ItemEffect,实现一个在敌人位置生成雷电打击效果的逻辑。生......
  • P1637 三元上升子序列
    P1637三元上升子序列简要题意,在一个序列中寻找长度为三的上升子序列思路有两种思路直接法一种是对于一个树,算一个数左边比他小的数,算右边比他大的数,然后相乘即是该该点处值算比他大的数,和比他小的数,用树状数组或线段树即皆可CODE#include<bits/stdc++.h>usingnamespace......
  • 被复线远传节点机JR-IPAM-1600
    产品描述JR-IPAM-1600J是一款被复线远传节点机,通过传统双绞线电缆(被复线\网线\对数电缆\矿用电缆等),用户就可以快速组成一个高速的传输网、局域网。它具有传输速率高、运行稳定、快速安装部署的特点,设备特有的AUTO工作模式,能够自动侦测线路和远端设备情况,自动调整到最佳性能。......
  • 25-018、基于STM32单片机智能行李箱设计-LED-BELL-KEY-指纹-LCD1602-GSM-GPS+HX711称
    本设计由STM32F103C8T6单片机核心板电路+LED指示灯电路+蜂鸣器报警电路+按键电路+指纹电路+LCD1602液晶显示电路+GSM模块电路+GPS模块电路组成。1、如果指纹错误。LED灯会闪,同时蜂鸣器发出滴滴声(3声即可)2、如果指纹输入三次失败后,禁止再用指纹解锁,如果指纹打不开,可以输入按键......
  • CF1647D Madoka and the Best School in Russia 做题记录
    我不会分讨。可以知道一个美丽数\(a\)的充要条件是\(a=d\timesk\)且\(d\nmidk\)。有个朴素的想法是将给你的\(x\)拆成\(d^p\timesk\)。显然如果\(p\le1\)那么我们拆不动。如果\(k\)可以拆成大于\(2\)个数的乘积,那么是可行的。如果\(k\)是质数,那么我们就......
  • 【漏洞复现】通达OA 2013、2016、2017 header.inc.php 任意用户登陆漏洞
    免责声明:        本文旨在提供有关特定漏洞的信息,以帮助用户了解潜在风险。发布此信息旨在促进网络安全意识和技术进步,并非出于恶意。读者应理解,利用本文提到的漏洞或进行相关测试可能违反法律或服务协议。未经授权访问系统、网络或应用程序可能导致法律责任或严......
  • OFA-Sys/chinese-clip-vit-base-patch16 占用显存测试
    model.get_image_features(inputs) 64batch_size2096MB取消withtorch.no_grad():后8GB占满16batch_size3886MB AutoModel.from_pretrained(MODEL_NAME)执行慢,原因是需要启用网络代理,否则总是卡在验证阶段 DataLoader增加num_workers后torch.cuda.OutOf......
  • CF1625E2. Cats on the Upgrade
    题目题解题目给了很重要的性质,就是保证询问的[l,r]是合法括号串(没有的话可能要莫队+二分找?)假设给出的s串是合法括号序,按照树转括号序的方法逆向转成树,用左括号下标作为树上点的标号例如()(()()),则有root-1,root-3,3-4,3-6,方法是维护左括号的栈,加入右括号时弹左括号t1,然......