LGR-204-Div.2
质量不错的比赛。
A
比较明显的题,贪心往下做就可以。
#include <bits/stdc++.h>
using i64 = long long;
constexpr int N = 1e5 + 7;
int k;
int a[N];
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> k;
for (int i = 1; i <= k; i++) {
std::cin >> a[i];
}
if (k == 1 && a[1] == 1) { std::cout << "1\n"; exit(0); }
std::sort(a + 1, a + k + 1);
int dep = 1, ans = 1;
for (int i = 1; i <= k; i++) {
ans += (a[i] - dep);
dep = a[i] - 1;
}
std::cout << ans << "\n";
return 0;
}
B
比较明显的题,模拟一下往下做就可以。
#include <bits/stdc++.h>
using i64 = long long;
void solve() {
int n;
std::string s;
std::cin >> n >> s;
int cnt = 1;
std::vector<int> a(n + 1);
if (s[0] == '=')
cnt = 2;
else
a[1] = 1;
char lst = s[0];
for (int i = 1; i < n - 1; i++) {
if (s[i] == '=') {
a[i + 1] = a[i];
cnt++;
}
else if (s[i] == s[i - 1]) {
a[i + 1] = a[i] + 1;
cnt = 1;
}
else if (s[i] != lst) {
a[i + 1] = cnt;
cnt = 1;
lst = s[i];
}
else if (s[i] == lst) {
a[i + 1] = a[i] + cnt;
cnt = 1;
}
}
i64 ans = 0;
for (int i = 0; i <= n; i++)
ans += a[i];
std::cout << ans << "\n";
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int t;
std::cin >> t;
while (t--) {
solve();
}
return 0;
}
C
观察到 \(m \leq 20\) 肯定不对劲,并且好像没有什么现成的方便的 DS 可以快速维护两序列区间排序并,注意到是一个诈骗题,直觉能够感受到在在不多次操作之后整个序列会趋向有序,这时可以直接考虑 swap()
掉,否则就暴力修改插入,然后发现这样是对的,可以证明最多只需要 \(O(m^2)\) 次操作,似乎是 \(\frac{m(m - 1)}{2}\)?
注意到它卡输入。
以后非必要没弄懂就不要乱解地址,你搞不明白,而且你 CSP 2024 已经炸了一次 set*
。
#include <bits/stdc++.h>
using i64 = long long;
template <typename T> T read() {
T sum = 0, fl = 1;
int ch = getchar_unlocked();
for (; !isdigit(ch); ch = getchar_unlocked()) { if (ch == '-') fl = -1; }
for (; isdigit(ch); ch = getchar_unlocked()) sum = sum * 10 + ch - '0';
return sum * fl;
}
template <typename T> void write(T x) {
if (x < 0) { x = -x; putchar_unlocked('-'); }
if (x > 9) write(x / 10);
putchar_unlocked(x % 10 + '0');
}
void solve() {
int n = read<int>(), m = read<int>(), q = read<int>();
std::vector<int> G[m + 1];
std::vector<bool> vis(m + 1);
for (int x = 1; x <= m; x++) {
for (int i = 1, p; i <= n; i++) {
p = read<int>();
G[x].push_back(p);
}
}
while (q--) {
int opt = read<int>(), x = read<int>(), y = read<int>();
if (opt == 2) {
write<int>(G[x][y - 1]);
puts("");
} else {
if (vis[x] && vis[y]) {
/*if (*G[x].end() <= *G[y].begin())
continue;
if (*G[y].end() <= *G[x].begin()) {
std::swap(G[x], G[y]);
continue;
}*/
if (G[x][G[x].size() - 1] <= G[y][0])
continue;
if (G[y][G[y].size() - 1] <= G[x][0]) {
std::swap(G[x], G[y]);
continue;
}
}
std::vector<int> v;
v.insert(v.end(), G[x].begin(), G[x].end());
v.insert(v.end(), G[y].begin(), G[y].end());
std::sort(v.begin(), v.end());
for (int i = 0; i < n; i++)
G[x][i] = v[i];
for (int i = n; i < v.size(); i++)
G[y][i - n] = v[i];
vis[x] = vis[y] = 1;
}
}
}
int main() {
// std::ios::sync_with_stdio(false);
// std::cin.tie(nullptr);
solve();
return 0;
}
D
试判断是否存在一个 \(n\) 个 \(0\) 和 \(m\) 个 \(1\) 的 \(01\) 串满足对于任意一个长度 \([2L, 2R]\) 的子串,其 \(n\) 和 \(m\) 的数量不相等
学习了一个新的 trick。
对于 \(01\) 串个数相等的问题,可以考虑将其转到二维平面上走网格,选择一个 \(1\) 表示向下走一格,选择一个 \(0\) 表示向下走一格。
这样子做的话我们就成功转化了题面:从 \((m, n)\) 往 \((0, 0)\) 走,走到 \((0, 0)\),每一次移动都会新产生几个障碍,求是否存在一条路径使其不经过障碍。
这样子看起来就可做了很多。
发现障碍的位置是随着移动的位置而平移的,贪心地贴着障碍边界往下走,如果最后障碍的边界与 \(x\) 轴的交点 \(\gt 0\) 就可行。
通过打表找一下周期,特殊处理 \(x\) 轴附近的点就解决问题了。
corner case 好像小多。
周期的探讨还是看 原的 Solution 比较好,照搬过来没什么意思。
好题。
#include <bits/stdc++.h>
using i64 = long long;
using u64 = unsigned long long;
void solve() {
u64 l, r, m, n;
std::cin >> l >> r >> m >> n;
if (!n || !m) {
std::cout << "Yes\n";
return;
}
if (l == 1) {
std::cout << "No\n";
return;
}
if (n > m) {
std::swap(n, m);
}
u64 a = (n - 1) / (l - 1);
u64 b = n - a * (l - 1);
u64 c = a * (l + 1) + std::min(b - 1, a * (r - l));
if (c <= m)
std::cout << "Yes\n";
else
std::cout << "No\n";
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int t;
std::cin >> t;
while (t--) {
solve();
}
return 0;
}
LGR-204-Div.2的更多相关文章
- Codeforces Round #204 (Div. 2) A.Jeff and Digits
因为数字只含有5或0,如果要被90整除的话必须含有0,否则输出-1 如果含有0的话,就只需考虑组合的数字之和是9的倍数,只需要看最大的5的个数能否被9整数 #include <iostream& ...
- Codeforces Round #204 (Div. 2)->D. Jeff and Furik
D. Jeff and Furik time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- Codeforces Round #204 (Div. 2)->C. Jeff and Rounding
C. Jeff and Rounding time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Codeforces Round #204 (Div. 2)->B. Jeff and Periods
B. Jeff and Periods time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Codeforces Round #204 (Div. 2) C
写了一记忆化 TLE了 把double换成long long就过了 double 这么耗时间啊 #include <iostream> #include<cstdio> #i ...
- Codeforces Round #204 (Div. 2): B
很简单的一个题: 只需要将他们排一下序,然后判断一下就可以了! 代码: #include<cstdio> #include<algorithm> #define maxn 10 ...
- Codeforces Round #204 (Div. 2): A
超级大水题: 只要用到一个小学用过的结论就可:能被9整除的数它的各位数相加能被9整除: 代码: #include<iostream> #define maxn 1005 using nam ...
- CF&&CC百套计划3 Codeforces Round #204 (Div. 1) E. Jeff and Permutation
http://codeforces.com/contest/351/problem/E 题意: 给出一些数,可以改变任意数的正负,使序列的逆序对数量最少 因为可以任意加负号,所以可以先把所有数看作正数 ...
- CF&&CC百套计划3 Codeforces Round #204 (Div. 1) B. Jeff and Furik
http://codeforces.com/contest/351/problem/B 题意: 给出一个n的排列 第一个人任选两个相邻数交换位置 第二个人有一半的概率交换相邻的第一个数>第二个数 ...
- CF&&CC百套计划3 Codeforces Round #204 (Div. 1) A. Jeff and Rounding
http://codeforces.com/problemset/problem/351/A 题意: 2*n个数,选n个数上取整,n个数下取整 最小化 abs(取整之后数的和-原来数的和) 先使所有的 ...
随机推荐
- KernelWarehouse:英特尔开源轻量级涨点神器,动态卷积核突破100+ | ICML 2024
动态卷积学习n个静态卷积核的线性混合,加权使用它们输入相关的注意力,表现出比普通卷积更优越的性能.然而,它将卷积参数的数量增加了n倍,因此并不是参数高效的.这导致不能探索n>100的设置(比典型 ...
- 常回家看看之house_of_kiwi
house of kiwi 前言:house_of_kiwi 一般是通过触发__malloc_assert来刷新IO流,最后可以劫持程序流或者通过和setcontext来打配合来进行栈迁移来得到fla ...
- 【论文解读】RLAIF基于人工智能反馈的强化学习
[论文解读]RLAIF基于人工智能反馈的强化学习 一.简要介绍 人类反馈强化学习(RLHF)可以有效地将大型语言模型(LLM)与人类偏好对齐,但收集高质量的人类偏好标签是一个关键瓶颈.论文进行了一场R ...
- SQL Server 语句日期格式查找方法
1. SQL Server中,处理日期格式和查找特定日期格式方法示例 在SQL Server中,处理日期格式和查找特定日期格式的记录是一个常见的需求.SQL Server提供了多种函数和格式选项来处理 ...
- 华为测试岗上岸,月入20K,面试无非就是这些套路!
软件测试工程师,和开发工程师相比起来,虽然前期可能不会太深,但是涉及的面还是比较广的.涉及的知识主要有 MySQL 数据库的使用.Linux 操作系统的使用.软件测试框架性的问题,测试环境搭建问题.当 ...
- RTThread内对##连接符和#转字符串这俩符号的使用
早就知道这俩符号的意思,最近翻看代码又看到了,仍然觉得熟悉又陌生,主要是自己平时写代码对这俩符号用的比较少.于是特地做个实验,加深下理解.可记的东西不多,这篇随笔算是随手一写吧. 上实验代码: 来源: ...
- Java远程连接服务器实现文件上传下载及目录操作
详情请阅读原文 在其基础之上做了进一步的封装 <!-- https://mvnrepository.com/artifact/com.jcraft/jsch --> <depende ...
- RedisTemplate设置的key,redis客户端取不到
原因:RedisTemplate 在set key时,key被序列化 解决办法1: import org.springframework.context.annotation.Bean; import ...
- Haproxy详解以及基于Haproxy的高可用实战
1.Haproxy与Keepalived VRRP 介绍 软件:haproxy 主要是做负载均衡的7层,也可以做4层负载均衡 apache也可以做7层负载均衡,但是很麻烦.实际工作中没有人用. ngi ...
- feign在服务间传递header
场景: 用户登陆后,再次访问网页,将用户信息loginToken放在request的header中,首先经过网关,然后到达A服务,然后A服务调用B服务时如何把loginToken传递给B服务 1.修改 ...