Educational Codeforces Round 87 (Rated for Div. 2)
比赛链接: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)的更多相关文章
- 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]]+ ...
- 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 ...
- 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 ...
- Educational Codeforces Round 43 (Rated for Div. 2)
Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...
- Educational Codeforces Round 35 (Rated for Div. 2)
Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...
- 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 ...
- 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 ...
- Educational Codeforces Round 63 (Rated for Div. 2) 题解
Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...
- 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 < ...
随机推荐
- ICMP协议概述
• ICMP是三层协议,和IP.ARP.ICMP同属三层 • IP协议中的6是代表上层的TCP协议,17代表UDP协议,1代表同层的ICMP协议 • ICMP协议主要用来探测 ...
- Nginx配置请求头
最近发现一个问题: IOS访问后台接口是,总是application/json;charset=utf-8 但是后台接口只支持大写的UTF-8,修改了Nginx的请求头之后正常. proxy_set_ ...
- CTFshow-萌新赛杂项_劝退警告
下载附件 https://www.lanzous.com/i9wocah 下载后得到一个劝退警告.zip 解压得到一张gif图片 使用binwalk分析发现包含zip 于是拿到了一个压缩包 打开后发现 ...
- 到底什么是哈希Hash?
有次面试被问到这个问题? 我说是经过运算的一串字符串,这个回答显然是让人不满意,连自己都不满意! 但是又对其很模糊,那么到底什么是Hash呢? 定义 Hash一般翻译为散列,还有音译为哈希,本文我们统 ...
- Redis中哈希分布不均匀该怎么办
前言 Redis 是一个键值对数据库,其键是通过哈希进行存储的.整个 Redis 可以认为是一个外层哈希,之所以称为外层哈希,是因为 Redis 内部也提供了一种哈希类型,这个可以称之为内部哈希.当我 ...
- 性能测试工具locust简单应用
简介 Locust是一种易于使用的分布式用户负载测试工具.可用于对网站(或系统)负载测试,并依据响应数据计算出系统支持的并发用户数. 安装及调试(以下操作在windows环境下进行) Locust基于 ...
- SMTP 协议发送邮件的整体过程
使用 SMTP 发送邮件_使用 SMTP 发送邮件_发送邮件_用户指南_邮件推送-阿里云 https://help.aliyun.com/knowledge_detail/51622.html 通过 ...
- “batteries included” philosophy
https://docs.djangoproject.com/en/2.2/ref/contrib/ contrib packages Django aims to follow Python's & ...
- SO_REUSEPORT 使用
https://www.cnblogs.com/Anker/p/7076537.html
- 用好Java中的枚举真的没有那么简单
1.概览 在本文中,我们将看到什么是 Java 枚举,它们解决了哪些问题以及如何在实践中使用 Java 枚举实现一些设计模式. enum关键字在 java5 中引入,表示一种特殊类型的类,其总是继承j ...