比赛链接:https://codeforces.com/contest/1354

A - Alarm Clock

题意

一个人要睡够 $a$ 分钟,一开始睡 $b$ 分钟后闹钟响铃,之后每次设置 $c$ 分钟后响铃,设置好后需要 $d$ 分钟入睡。

题解

首先判断能不能一开始就睡足 $a$ 分钟,如果不能判断能不能入睡,如果可以用需要补睡的时间对每次可以睡着的时间取上整。

代码

#include <bits/stdc++.h>
using ll = long long;
using namespace std; void solve() {
ll a, b, c, d; cin >> a >> b >> c >> d;
if (b >= a) {
cout << b << "\n";
} else {
ll need = a - b;
if (c <= d)
cout << -1 << "\n";
else
cout << b + c * ((need + c - d - 1) / (c - d)) << "\n";
}
} int main() {
int t; cin >> t;
while (t--) solve();
}

B - Ternary String

题意

字符串 $s$ 由 1,2,3 组成,输出包含 1,2,3 的最短连续子串。

题解

记录 1,2,3 的位置,枚举 1,2,3 的前后关系即可。

代码

#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9; void solve() {
string s; cin >> s;
vector<int> pos[3];
for (int i = 0; i < s.size(); i++) {
pos[s[i] - '1'].push_back(i);
}
int p[3] = {0, 1, 2};
int ans = INF;
do {
for (int a : pos[p[0]]) {
auto b = upper_bound(pos[p[1]].begin(), pos[p[1]].end(), a);
if (b == pos[p[1]].end()) break;
auto c = upper_bound(pos[p[2]].begin(), pos[p[2]].end(), *b);
if (c == pos[p[2]].end()) break;
ans = min(ans, *c - a + 1);
}
} while(next_permutation(p, p + 3));
cout << (ans == INF ? 0 : ans) << "\n";
} int main() {
int t; cin >> t;
while (t--) solve();
}

C1 - Simple Polygon Embedding

题意

计算能包含正多边形的正方形的最小边长,正多边形可以旋转。(多边形的边数为 2 * 偶数)

题解

这是正八边形时的情况,观察发现边数为四的倍数的正多边形都可以恰好对称地四等分嵌在正方形中,所以计算出内切圆直径即可。

代码

#include <bits/stdc++.h>
#define PI acos(-1)
using namespace std; void solve() {
int n; cin >> n;
n = 2 * n;
printf("%.9f\n", cos(PI / n) / sin(PI/ n));
} int main() {
int t; cin >> t;
while (t--) solve();
}

C2 - Not So Simple Polygon Embedding

题意

计算能包含正多边形的正方形的最小边长,正多边形可以旋转。(多边形的边数为 2 * 奇数)

题解

正六边形时大概长这样,算出正六边形与正方形的边较小的夹角为 15 度,求出对角线长乘以 sin 即可,其他边数情况我不太会证,但是觉得应该和正六边形差不多emmm...

代码

#include <bits/stdc++.h>
#define PI acos(-1)
using namespace std; void solve() {
int n; cin >> n;
n = 2 * n;
printf("%.9f\n", 0.5 / sin(PI / (2 * n)));
} int main() {
int t; cin >> t;
while (t--) solve();
}

D - Multiset

题意

开始时 $multiset$ 中有 $n$ 个元素,之后 $q$ 次操作如下:

  • $k_i > 0$,插入 $k_i$
  • $k_i < 0$,删除第 $|k_i|$ 个元素(删除元素的序号不会大于集合的大小)

题解

树状数组模拟。

代码一

复杂度:$O_{(nlog_n)}$,参考自:square1001

#include <bits/stdc++.h>
using namespace std;
const int N = 1048576; int bit[N]; void add(int pos, int val) {
for (int i = pos; i <= N; i += i & (-i)) {
bit[i] += val;
}
} int bsearch(int x) {
int ptr = 0;
for (int i = N / 2; i >= 1; i >>= 1) {
if (bit[ptr + i] < x) {
x -= bit[ptr + i];
ptr += i;
}
}
return ptr + 1;
} int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, q; cin >> n >> q;
for (int i = 0; i < n; i++) {
int x; cin >> x;
add(x, 1);
}
int cnt = n;
for (int i = 0; i < q; i++) {
int x; cin >> x;
if (x > 0) {
add(x, 1);
++cnt;
} else {
add(bsearch(-x), -1);
--cnt;
}
}
cout << (cnt ? bsearch(1) : 0);
}

代码二

复杂度:$O_{(nlog_n^2)}$,参考自:_封刀看海

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 100; int bit[N]; void update(int pos, int val) {
for (int i = pos; i <= N; i += i & (-i)) {
bit[i] += val;
}
} int query(int pos) {
int ans = 0;
for (int i = pos; i >= 1; i -= i & (-i)) {
ans += bit[i];
}
return ans;
} int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, q; cin >> n >> q;
for (int i = 0; i < n; i++) {
int x; cin >> x;
update(x, 1);
}
for (int i = 0; i < q; i++) {
int x; cin >> x;
if (x > 0) {
update(x, 1);
} else {
int l = 1, r = N;
while (l < r) {
int mid = (l + r) / 2;
if (query(mid) >= -x)
r = mid;
else
l = mid + 1;
}
update(l, -1);
}
}
int ans = find_if(bit, bit + N, [] (int x) {
return x > 0;
}) - bit;
cout << (ans == N ? 0 : ans);
}

Educational Codeforces Round 87 (Rated for Div. 2)的更多相关文章

  1. Educational Codeforces Round 87 (Rated for Div. 2) D树状数组加二分删除的值

    Sample Input 5 4 1 2 3 4 5 -5 -1 -3 -1 Sample Output 3 思路,首先发现a[i]的值的范围是在1~n之间,每次插入我们可以直接把cnt[a[i]]+ ...

  2. Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...

  3. Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...

  4. Educational Codeforces Round 43 (Rated for Div. 2)

    Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...

  5. Educational Codeforces Round 35 (Rated for Div. 2)

    Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...

  6. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...

  7. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...

  8. Educational Codeforces Round 63 (Rated for Div. 2) 题解

    Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...

  9. Educational Codeforces Round 39 (Rated for Div. 2) G

    Educational Codeforces Round 39 (Rated for Div. 2) G 题意: 给一个序列\(a_i(1 <= a_i <= 10^{9}),2 < ...

随机推荐

  1. 【SpringBoot1.x】 Docker

    SpringBoot1.x Docker 核心概念 Docker 是一个开源的应用容器引擎,是一个轻量级容器技术.Docker 支持将软件编译成一个镜像,然后在镜像中各种软件做好配置,将镜像发布出去, ...

  2. 【C++】《Effective C++》第八章

    第八章 定制new和delete 对于程序开发来说,了解C++内存管理例程的行为是非常重要的.其中两个主角是分配例程和归还例程(operator new和operator delete),配角是new ...

  3. LeetCode24 两两交换链表中的节点

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说明: 你的算法只能使用常数的 ...

  4. Java开发手册之数据库规约

    1.不要使用 count(列名)或 count(常量)来替代 count(*),count(*)是 SQL92 定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关. 2.cou ...

  5. 【RAC】通过命令查看当前数据库是不是rac

    SQL> show parameter  cluster_database 如果参数中显示的是 NAME                                 TYPE        ...

  6. awk中引用shell变量的方法

    1.通过命令行参数定义变量时引用: awk -v awk变量名= shell变量名 #!/bin/bash var4bash=test awk -v var4awk="$var4bash&q ...

  7. vue-cli3x4x修改本地端口port

    一.推荐方法 "scripts": { "serve": "vue-cli-service serve --port 3000", &quo ...

  8. 第一章:起步(python环境搭建)

    Python 环境搭建 学习python的第一步,就是要学习python开发环境的配置,在配置好python开发环境后,你需要再安装一款比较趁手的编辑器,事实上,python解释器本身就可以进行一些编 ...

  9. 获取html中某些标签的值

    一.获取单选按钮radio的值 <!doctype html> <html lang="en"> <head> <meta charset ...

  10. Elasticsearch从入门到放弃:浅谈算分

    今天来聊一个 Elasticsearch 的另一个关键概念--相关性算分.在查询 API 的结果中,我们经常会看到 _score 这个字段,它就是用来表示相关性算分的字段,而相关性就是描述一个文档和查 ...