比赛链接

A

题解

知识点:模拟。

时间复杂度 \(O(1)\)

空间复杂度 \(O(1)\)

代码

#include <bits/stdc++.h>
#define ll long long using namespace std; bool solve() {
int a, b, c;
cin >> a >> b >> c;
if (a + b == c || a + c == b || b + c == a) cout << "YES" << '\n';
else cout << "NO" << '\n';
return true;
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << -1 << '\n';
}
return 0;
}

B

题解

知识点:枚举。

查重即可。

时间复杂度 \(O(n \log n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>
#define ll long long using namespace std; bool solve() {
int n;
cin >> n;
set<int> st;
bool ok = 1;
for (int i = 1;i <= n;i++) {
int x;
cin >> x;
if (st.count(x)) ok = 0;
st.insert(x);
}
if (ok) cout << "YES" << '\n';
else cout << "NO" << '\n';
return true;
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << -1 << '\n';
}
return 0;
}

C

题解

知识点:贪心。

行红,列蓝别搞错。

时间复杂度 \(O(1)\)

空间复杂度 \(O(1)\)

代码

#include <bits/stdc++.h>
#define ll long long using namespace std; char dt[10][10];
bool solve() {
for (int i = 1;i <= 8;i++)
for (int j = 1;j <= 8;j++)
cin >> dt[i][j];
for (int i = 1;i <= 8;i++) {
bool ok = 1;
for (int j = 1;j <= 8;j++) ok &= dt[i][j] == 'R';
if (ok) {
cout << 'R' << '\n';
return true;
}
}
for (int j = 1;j <= 8;j++) {
bool ok = 1;
for (int i = 1;i <= 8;i++) ok &= dt[i][j] == 'B';
if (ok) {
cout << 'B' << '\n';
return true;
}
}
return true;
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << -1 << '\n';
}
return 0;
}

D

题解

知识点:枚举,数论。

注意到 \(a_i \in [1,1000]\) ,因此贪心地记录 \(a_i\) 最后一次的位置,枚举 \([1,1000]\) 每个数的组合即可。

时间复杂度 \(O(n+1000^2)\)

空间复杂度 \(O(1000)\)

代码

#include <bits/stdc++.h>
#define ll long long using namespace std; int vis[1007];
bool solve() {
int n;
cin >> n;
memset(vis, 0, sizeof(vis));
for (int i = 1;i <= n;i++) {
int x;
cin >> x;
vis[x] = max(vis[x], i);
}
int ans = -1;
for (int i = 1;i <= 1000;i++) {
if (!vis[i]) continue;
for (int j = i;j <= 1000;j++) {
if (!vis[j]) continue;
if (__gcd(i, j) == 1) ans = max(ans, vis[i] + vis[j]);
}
}
cout << ans << '\n';
return true;
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << -1 << '\n';
}
return 0;
}

E

题解

知识点:二分,前缀和,枚举。

预处理前缀和方便输出答案,前缀最大值方便找到最大合法段,然后二分查询第一个大于 \(x\) 的位置 \(i\) ,则 \([1,i-1]\) 都可以。

时间复杂度 \(O(n+q\log n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>
#define ll long long using namespace std; ll a[200007], mx[200007];
bool solve() {
int n, q;
cin >> n >> q;
for (int i = 1;i <= n;i++) {
cin >> a[i];
mx[i] = max(mx[i - 1], a[i]);
a[i] += a[i - 1];
}
while (q--) {
int x;
cin >> x;
int pos = upper_bound(mx + 1, mx + 1 + n, x) - mx - 1;
cout << a[pos] << ' ';
}
cout << '\n';
return true;
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << -1 << '\n';
}
return 0;
}

F

题解

知识点:贪心。

我们可以任意排列且 \(s,t\) 初始有 a ,那么如果 \(t\) 具有超过 a 的字母,那么一定可以有 \(s<t\) ;否则,如果 \(s\) 也没有超过 a 的字母且 \(s\) 长度小于 \(t\) ,那么一定可以有 \(s<t\) ;否则一定有 \(t<s\) 。

时间复杂度 \(O(q+\sum |s|)\)

空间复杂度 \(O(|s|)\)

代码

#include <bits/stdc++.h>
#define ll long long using namespace std; bool solve() {
int q;
cin >> q;
ll cnts = 0, cntt = 0;
bool sbad = 0, tgood = 0;
while (q--) {
int d, k;
string x;
cin >> d >> k >> x;
if (d == 1) {
for (auto ch : x) {
cnts += k * (ch == 'a');
sbad |= ch != 'a';
}
}
else {
for (auto ch : x) {
cntt += k * (ch == 'a');
tgood |= ch != 'a';
}
}
if (tgood) cout << "YES" << '\n';
else if (!sbad && cnts < cntt) cout << "YES" << '\n';
else cout << "NO" << '\n';
}
return true;
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << -1 << '\n';
}
return 0;
}

G

题解

知识点:位运算,贪心,枚举。

用 \(val\) 记录目前哪个位置还缺 \(1\) 。每次枚举没有取过的数字,找到一个数 \(a[pos]\) 使 a[pos] & val 最大,表示有效位组成最大的数字。然后取出来,并通过 val &= ~a[pos] 把 \(val\) 中对应的 \(1\) 删除(把 \(a[pos]\) 取反,原来的 \(1\) 现在都为 \(0\) ,然后与 \(val\) 就能删掉 \(val\) 对应的 \(1\))。最后把 \(a[pos]\) 交换到末尾的有效数字,实现逻辑删除。

因为 int 有 \(31\) 位,每次删除删的是结果最大的,最多删除 \(31\) 次就能达到这个序列或的最大值。

时间复杂度 \(O(n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>
#define ll long long using namespace std; int a[200007];
bool solve() {
int n;
cin >> n;
for (int i = 1;i <= n;i++) cin >> a[i];
int val = ~(1 << 31);
for (int i = 1;i <= min(31, n);i++) {
int pos = 1;
for (int j = 1;j <= n - i + 1;j++) {
if ((val & a[j]) > (val & a[pos])) pos = j;
}
cout << a[pos] << ' ';
val &= ~a[pos];
swap(a[n - i + 1], a[pos]);
}
for (int i = 1;i <= n - min(31, n);i++) cout << a[i] << ' ';
cout << '\n';
return true;
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << -1 << '\n';
}
return 0;
}

Codeforces Round #827 (Div. 4) A-G的更多相关文章

  1. Educational Codeforces Round 47 (Div 2) (A~G)

    目录 Codeforces 1009 A.Game Shopping B.Minimum Ternary String C.Annoying Present D.Relatively Prime Gr ...

  2. Educational Codeforces Round 46 (Div 2) (A~G)

    目录 Codeforces 1000 A.Codehorses T-shirts B.Light It Up C.Covered Points Count(差分) D.Yet Another Prob ...

  3. Educational Codeforces Round 45 (Div 2) (A~G)

    目录 Codeforces 990 A.Commentary Boxes B.Micro-World C.Bracket Sequences Concatenation Problem D.Graph ...

  4. Codeforces Round #582 (Div. 3)-G. Path Queries-并查集

    Codeforces Round #582 (Div. 3)-G. Path Queries-并查集 [Problem Description] 给你一棵树,求有多少条简单路径\((u,v)\),满足 ...

  5. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  6. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  7. 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts

    题目传送门 /* 贪心 + 模拟:首先,如果蜡烛的燃烧时间小于最少需要点燃的蜡烛数一定是-1(蜡烛是1秒点一支), num[g[i]]记录每个鬼访问时已点燃的蜡烛数,若不够,tmp为还需要的蜡烛数, ...

  8. Codeforces Round #383 (Div. 2) 题解【ABCDE】

    Codeforces Round #383 (Div. 2) A. Arpa's hard exam and Mehrdad's naive cheat 题意 求1378^n mod 10 题解 直接 ...

  9. 模拟 Codeforces Round #249 (Div. 2) C. Cardiogram

    题目地址:http://codeforces.com/contest/435/problem/C /* 题意:给一组公式,一组数据,计算得到一系列的坐标点,画出折线图:) 模拟题:蛮恶心的,不过也简单 ...

随机推荐

  1. CF280D k-Maximum Subsequence Sum(线段树)

    在做这题时我一开始把\(tag\)写入了结构体 #include <iostream> #include <cstdio> #include <cstring> # ...

  2. 888. 公平的糖果交换--LeetCode

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/fair-candy-swap 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. 假 ...

  3. Prometheus+Grafana监控-基于docker-compose搭建

    前言 Prometheus Prometheus 是有 SoundCloud 开发的开源监控系统和时序数据库,基于 Go 语言开发.通过基于 HTTP 的 pull 方式采集时序数据,通过服务发现或静 ...

  4. [ARC119E] Pancakes (二维偏序,分类讨论)

    题面 一个长为 N N N 的序列 S S S ,最多翻转序列中一个区间,最小化 ∑ i = 2 N ∣ S i − S i − 1 ∣ \sum_{i=2}^{N}|S_i-S_{i-1}| i=2 ...

  5. 关于 Math.random()生成指定范围内的随机数的公式推导

    关于 Math.random()生成指定范围内的随机数的公式推导 在 java 中,用于生成随机数的 Math 方法 random()只能生成 0-1 之间的随机数,而对于生成指定区间,例如 a-b ...

  6. 第七十二篇:Vue组件的props

    好家伙, 1.组件的props props是组件的自定义属性,在封装通用组件的时候,合理的使用props可以极大的提高组件的复用性 来假设一下,如果我们需要两个组件分别显示不同的值 目录结构如下: H ...

  7. 没有二十年功力,写不出Thread.sleep(0)这一行“看似无用”的代码!

    你好呀,我是喜提七天居家隔离的歪歪. 这篇文章要从一个奇怪的注释说起,就是下面这张图: 我们可以不用管具体的代码逻辑,只是单单看这个 for 循环. 在循环里面,专门有个变量 j,来记录当前循环次数. ...

  8. 踩坑之旅:配置 ROS 环境

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16660252.html 最近在学习机器人相关的导航算法, ...

  9. KingbaseES V8R6集群同步模式synchronous参数配置详解

    如下图所示: 集群数据同步原理说明: synchronous参数配置测试: 集群节点信息: ID | Name | Role | Status | Upstream | repmgrd | PID | ...

  10. limits.conf 配置不生效问题排查

    在部署数据库时,经常会遇到打开最大文件数限制 too many open files 的警告,通常我们只需要修改/etc/security/limits.conf该文件,增加两行,重新登录即可解决. ...