The 3rd Universal Cup. Stage 16: Nanjing

news/2024/11/13 9:59:58/文章来源:https://www.cnblogs.com/PHarr/p/18537887

B. Birthday Gift

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

#include <bits/stdc++.h>#define ll long longvoid 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 i64using 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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/830622.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙NEXT开发案例:转盘1W

【1】引言(完整代码在最后面) 在鸿蒙NEXT系统中,开发一个有趣且实用的转盘应用不仅可以提升用户体验,还能展示鸿蒙系统的强大功能。本文将详细介绍如何使用鸿蒙NEXT系统开发一个转盘应用,涵盖从组件定义到用户交互的完整过程。 【2】环境准备 电脑系统:windows 10 开发工…

开源 - Ideal库 - 常用时间转换扩展方法(二)Qv

合集 - Ideal库 - Common库(2)1.开源 - Ideal库 - 常用时间转换扩展方法(一)11-07:悠兔机场2.开源 - Ideal库 - 常用时间转换扩展方法(二)11-09收起 书接上回,我们继续来分享一些关于时间转换的常用扩展方法。01、时间转日期时间 TimeOnly 该方式是把TimeOnly类型转为Date…

存储器的知识

以W25Q256为例子(外部Flash),结构如下:扇区的内部结构以F10系列为例子 64位代表的是8个字节的数据,一个地址最多可以存储8个字节的数据(double数据类型就是8个字节),4k,16k,64k,32k代表的是地址的总数,主存储块又可以分为很多个页,页里面也有存储的空间大小嵌入式闪存的组成

什么是git,什么是github,git和github的使用

Git实战注意:本项目是学习笔记,来自于哔哩哔哩武沛齐老师的Git实战视频, 网址:【武沛齐老师讲git,看完绝对上瘾!!!】 https://www.bilibili.com/video/BV1ne4y1E7np/?share_source=copy_web&vd_source=2c9a5d5590d3759367594e264ff079c4另外,因为这个博客是我直接…

law Intermediate walkthrough pg

靶场很简单分数只有10分跟平常做的20分的中级靶场比确实简单 我拿来放松的 算下来30分钟解决战斗 nmap 扫到80端口web界面 是个框架 搜exp https://www.exploit-db.com/exploits/52023 他的脚本可能有点问题看不到回显 我们审脚本直接看到漏洞点所在 命令执行 curl -s -d "…

streamlit run执行报错,Invalid value: File does not exist: XXX.py

streamlit run执行报错,Invalid value: File does not exist: XXX.py 在终端执行 streamlit run xxx.py 的时候报错提示 Invalid value: File does not exist: XXX.py 网上众说纷纭,但是我个人的解决方法其实非常简单 在终端中执行的时候会发现中间多了个warning翻译过来就是…

03_muduo_base3

5.6 互斥锁和条件变量的封装 类图该类是封装了互斥锁的一些基本操作,包括互斥锁的初始化、销毁、上锁、解锁等功能。但是实际上使用RAII技术又封装了一个类,那就是MutexLockGuard。这主要也是采取了类似智能指针的封装思路,让互斥锁的生命周期交给操作系统去管理,释放的时机…

B样条(BSpline,即 Basis Spline)

B 样条(BSpline)是一种在计算机图形学、计算机辅助设计、数值分析等领域广泛应用的数学曲线和曲面表示方法。以下是对 B 样条的详细定义: 一、基本概念 B 样条是基于一系列控制点(Control Points)来定义曲线或曲面的。它通过一个特定的基函数(Basis Functions)集合与这些…

实验3 类和对象

实验任务1: button.hpp#pragma once#include <iostream> #include <string>using std::string; using std::cout;// 按钮类 class Button { public:Button(const string &text);string get_label() const;void click();private:string label; };Button::Butto…

【LaTex 2024软件下载与安装教程】

1、安装包 Latex2024: 链接:https://pan.quark.cn/s/1dad34ca4d8f 提取码:5bja 2、安装教程 1) 双击压缩包内intall-tl-windows.bat安装,弹窗安装对话框2) 自动弹出安装窗口,如果弹出以下窗口说明文件夹目录太长或者有中文,建议放磁盘根目录;如果没有弹出…

实现qt 窗口无边框拖拽

无边框拖拽是参考Qt实战6.万能的无边框窗口(FramelessWindow) - Qt小罗 - 博客园的文章,对其代码进行修改而来。 本篇一共会提供本人写的无边框的代码以及Qt实战6.万能的无边框窗口(FramelessWindow) - Qt小罗 - 博客园里面的完整代码供大家参考. 代码使用的话,我是直接让…

20222411 2024-2025-1 《网络与系统攻防技术》实验四实验报告

1.实验内容 1.1实践内容 一、恶意代码文件类型标识、脱壳与字符串提取 对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下: (1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具…