传送门

A. Balanced Rating Changes

签到,分正负搞一下就行。

B. Balanced Tunnel

题意:

给出\(n\)辆车的进洞顺序和出洞顺序,问有多少量车实现了洞中超车。

思路:

对于进洞的车\(i\),找到其出洞之前所有的车,若有车还未进洞,则那辆车实现了超车。

对于出洞序列维护一个指针\(j\),可以证明,任一时刻\(j\)之前的车都处于超车和没超车两种状态,也就是说\(j\)是单调不减的。

然后就类似于双指针搞下就行。

Code
#include <bits/stdc++.h>
#define MP make_pair
#define fi first
#define se second
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
// #define Local
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 1e5 + 5; int n; int a[N], b[N];
bool chk[N], fined[N]; void run() {
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 1; i <= n; i++) cin >> b[i];
int j = 1;
for(int i = 1; i <= n; i++) {
chk[a[i]] = 1;
while(j <= n && !fined[a[i]] && b[j] != a[i]) {
if(!chk[b[j]]) fined[b[j]] = 1;
++j;
}
}
int ans = 0;
for(int i = 1; i <= n; i++) {
ans += fined[i];
}
cout << ans << '\n';
} int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
#ifdef Local
freopen("../input.in", "r", stdin);
freopen("../output.out", "w", stdout);
#endif
while(cin >> n) run();
return 0;
}

C2. Balanced Removals (Harder)

题意:

在三维空间中给出\(n\)个点,现在要不断删除以两个点为对角线顶点的立方体,并要求立方体中不含任何其它点。

输出删除序列。

思路:

  • 可以考虑二维状态怎么处理这个问题。
  • 显然若\(x\)都不同,排序直接删除就行
  • 若存在\(x\)相同,我们需要单独删除横坐标相同的点,最后至多留下一个点,问题转换为上述问题。
  • 那么对于三维状态也同理,只是实现起来稍微复杂一点。

详见代码:

Code
#include <bits/stdc++.h>
#define MP make_pair
#define fi first
#define se second
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
// #define Local
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 50005; int n;
struct Point{
int x, y, z, id;
bool operator < (const Point &A) const {
if(x != A.x) return x < A.x;
if(y != A.y) return y < A.y;
if(z != A.z) return z < A.z;
return id < A.id;
}
}a[N]; void run() {
for(int i = 1; i <= n; i++) {
cin >> a[i].x >> a[i].y >> a[i].z;
a[i].id = i;
}
sort(a + 1, a + n + 1);
std::vector<Point> v2;
for(int i = 1, j; i <= n; i = j) {
j = i;
while(j <= n && a[i].x == a[j].x) ++j;
std::vector<Point> v;
for(int k = i, t; k < j; k = t) {
t = k;
while(t < j && a[k].y == a[t].y) ++t;
for(int p = k; p < t; p += 2) {
if (p + 1 < t) {
cout << a[p].id << ' ' << a[p + 1].id << '\n';
} else {
v.push_back(a[p]);
}
}
}
for(int p = 0; p < sz(v); p += 2) {
if(p + 1 < sz(v)) {
cout << v[p].id << ' ' << v[p + 1].id << '\n';
} else {
v2.push_back(v[p]);
}
}
}
for(int i = 0; i < sz(v2); i += 2) {
cout << v2[i].id << ' ' << v2[i + 1].id << '\n';
}
} int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
#ifdef Local
freopen("../input.in", "r", stdin);
freopen("../output.out", "w", stdout);
#endif
while(cin >> n) run();
return 0;
}

D. Balanced Playlist

题意:

给出一个环,每个点有权值。现在从每个点出发,定义走过路径上点权的最大值为\(max\),那么走到一个点其权值\(v\)满足\(v<\frac{max}{2}\)时停止。

问从每一个点出发所走的路径长度为多少,若无限走下去则输出\(-1\)。

思路:

这个题我是暴力*过去的hhhh。

我的做法就是类似于双指针那样,维护两个指针来跑,但复杂度可能高达\(O(n^2)\)。后来我加了点trick就1700ms给卡过去了2333。

但其实\(O(nlogn)\)的做法很多,二分、线段树这些都行...但二分+RMQ应该是最简单的做法吧。

给出我的暴力代码:

Code
#include <bits/stdc++.h>
#define MP make_pair
#define fi first
#define se second
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
// #define Local
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 3e5 + 5; int n;
int a[N];
int ans[N];
//y < x
bool ok(int x, int y) {
return y < (x + 1) / 2;
} void run() {
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 1; i <= n; i++) a[i + 2 * n] = a[i + n] = a[i];
int Min = *min_element(a + 1, a + n + 1);
int Max = *max_element(a + 1, a + n + 1);
if(!ok(Max, Min)) {
for(int i = 1; i <= n; i++) cout << -1 << " \n"[i == n];
return;
}
for(int i = 1, j; i <= n; i = j + 1) {
j = i;
int mx = a[i], p = i;
while(j + 1 <= 3 * n && !ok(mx, a[j + 1])) {
++j;
if(a[j] >= mx) {
mx = a[j];
p = j;
}
}
for(int k = i; k <= p; k++) {
ans[k] = j + 1 - k;
}
while(p < n && ok(a[p + 1], a[j + 1])) {
++p;
ans[p] = j + 1 - p;
}
j = p;
}
for(int i = 1; i <= n; i++) cout << ans[i] << " \n"[i == n];
} int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
#ifdef Local
freopen("../input.in", "r", stdin);
freopen("../output.out", "w", stdout);
#endif
while(cin >> n) run();
return 0;
}

Codeforces Global Round 5的更多相关文章

  1. CodeForces Global Round 1

    CodeForces Global Round 1 CF新的比赛呢(虽然没啥区别)!这种报名的人多的比赛涨分是真的快.... 所以就写下题解吧. A. Parity 太简单了,随便模拟一下就完了. B ...

  2. Codeforces Global Round 1 - D. Jongmah(动态规划)

    Problem   Codeforces Global Round 1 - D. Jongmah Time Limit: 3000 mSec Problem Description Input Out ...

  3. Codeforces Global Round 2 题解

    Codeforces Global Round 2 题目链接:https://codeforces.com/contest/1119 A. Ilya and a Colorful Walk 题意: 给 ...

  4. Codeforces Global Round 1 (A-E题解)

    Codeforces Global Round 1 题目链接:https://codeforces.com/contest/1110 A. Parity 题意: 给出{ak},b,k,判断a1*b^( ...

  5. Codeforces Global Round 3

    Codeforces Global Round 3 A. Another One Bites The Dust 有若干个a,有若干个b,有若干个ab.你现在要把这些串拼成一个串,使得任意两个相邻的位置 ...

  6. Codeforces Global Round 1 (CF1110) (未完结,只有 A-F)

    Codeforces Global Round 1 (CF1110) 继续补题.因为看见同学打了这场,而且涨分还不错,所以觉得这套题目可能会比较有意思. 因为下午要开学了,所以恐怕暂时不能把这套题目补 ...

  7. 【手抖康复训练1 】Codeforces Global Round 6

    [手抖康复训练1 ]Codeforces Global Round 6 总结:不想复习随意打的一场,比赛开始就是熟悉的N分钟进不去时间,2333,太久没写题的后果就是:A 题手抖过不了样例 B题秒出思 ...

  8. Codeforces Global Round 11 个人题解(B题)

    Codeforces Global Round 11 1427A. Avoiding Zero 题目链接:click here 待补 1427B. Chess Cheater 题目链接:click h ...

  9. 【Codeforces Round 1110】Codeforces Global Round 1

    Codeforces Round 1110 这场比赛只做了\(A\).\(B\).\(C\),排名\(905\),不好. 主要的问题在\(D\)题上,有\(505\)人做出,但我没做出来. 考虑的时候 ...

  10. 树形DP ---- Codeforces Global Round 2 F. Niyaz and Small Degrees引发的一场血案

    Aspirations:没有结果,没有成绩,acm是否有意义?它最大的意义就是让我培养快速理解和应用一个个未知知识点的能力. ————————————————————————————————————— ...

随机推荐

  1. springboot + springcloud +nacos实战

    首先从整个软件的功能和应用场景来说,nacos更像consul,而非eureka,nacos设计的时候自带的配置中心功能,让我们省下了去搞springcloud config的时间,但这里并不是说na ...

  2. uml统一建模语言学习笔记(一)

    UML是一种统一建模语言,他是以面向对象的方式来实现对任何的系统进行描述的一种语言, 它包括9种图形+包图,分为静态和动态两种,也就是结构图和行为图 “静态”图有:用例图.类图.对象图.部署图.构件图 ...

  3. Nginx 入门学习

    什么是 Nginx Nginx 是一款轻量级高性能的web 和 反向代理服务器,类似于Apache,也是一个 IMAP/POP3/SMTP (电子邮件)代理服务器.由俄罗斯程序设计师 Igor Sys ...

  4. vmware无法安装vmware authorization&windows无法启动VMware Authorization Service服务

    在vmware安装过程中或更新时,时常遇到vmware无法安装vmware authorization&windows无法启动VMware Authorization Service服务的情况 ...

  5. MySQL集群读写分离的自定义实现

    基于MySQL Router可以实现高可用,读写分离,负载均衡之类的,MySQL Router可以说是非常轻量级的一个中间件了.看了一下MySQL Router的原理,其实并不复杂,原理也并不难理解, ...

  6. TypeScript初体验

    第一次运行TypeScript 1.创建文件夹并初始化项目 mkdir ts-demo cd ts-demo npm init -y 2.安装typescript与ts-node # 局部安装 npm ...

  7. Download Shuttle Pro mac文件下载器使用指南

    Download Shuttle Pro是适用于macOS的最强大的下载管理器和加速器.它将文件下载分为多个部分,与使用Web浏览器相比,可以提高整体下载速度.使用我们的Pro版本,您可以访问我们的新 ...

  8. Mysql安装及常用命令

    部分内容转载于 https://www.linuxidc.com/Linux/2016-09/135288.htm https://www.cnblogs.com/rays-/p/8081798.ht ...

  9. Object-defineProperty ES5

    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象. Object.defineProperty(obj, prop, ...

  10. jupyter notebook改变行间图片大小

    jupyter notebook使用起来代码效果很直接,这是我最喜欢的一点,但是主题单一,后来改了一下主题.也可以接受了,但是还有一个问题是显示图片太小我们可以用两个方法来改变它. 一.可以通过rcP ...