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 < ...
随机推荐
- C语言指针的大小
C语言指针的大小 今天看到一道题目是这样的,写出以下变量在32位设备上的大小(占多少个字节) 然后其中就有一些指针类型的数据,那么我们知道在C语言中指针的大小都是一样的,不管是有数据类型的还是void ...
- 【MyBatis】MyBatis 缓存
MyBatis 缓存 文章源码 什么是缓存 像大多数的持久化框架一样,MyBatis 也提供了缓存策略,通过缓存策略来减少数据库的查询次数,从而提高性能. Mybatis 中缓存分为一级缓存,二级缓存 ...
- Flutter 基础组件:状态管理
前言 一个永恒的主题,"状态(State)管理",无论是在React/Vue(两者都是支持响应式编程的Web开发框架)还是Flutter中,他们讨论的问题和解决的思想都是一致的. ...
- leetcode-242有效字母异位词
题目 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram&quo ...
- memcached+magent的集群部署详细过程
问题描述 Memcached在实现分布集群部署时, Memcached服务端的之间是没有通讯的,服务端是伪分布式,实现分布式是由客户端实现的,客户端实现了分布式算法把数据保存到不同的Memcached ...
- 计算起始车站车费问题-JavaScript数组对象写法
计算起始站车费 题目:深圳--60--广州--50-虎门--40- -中山--36-珠海一34-澳门一89一香港以上车票费用计算,如坐车深圳到广州60元,广州到虎门50元,深圳到虎门就是60+50-1 ...
- 【Jboss】一台服务器上如何部署多个jboss
一台服务器上如何部署多个jboss呢?直接把整个部署环境copy一份到相应的目录下? 这样只是前提,但是启动复制后的jboss就会发现,有很多端口被占用 3873,8080,8009,8443,808 ...
- pytest:通过scope控制fixture的作用范围
一.fixture里面有个参数scope,通过scope可以控制fixture的作用范围,根据作用范围大小划分:session>module>class>function,具体作用范 ...
- 多路复用器Select、Poll、Epoll区别梳理
注意:本文是本人的学习总结,可能存在理解上的错误,请带着怀疑眼光看待,如果有不准确的地方欢迎指出,疑义相与析.为了叙述完整性,前面有一些前置知识,可以根据目录直接看后面的详解部分. 前置知识 用户态与 ...
- 回滚原理 Since database connections are thread-local, this is thread-safe.
mysql django 实践: django @transaction.atomic 机制分析 1.数据库清空表Tab 2.请求django-view @transaction.at ...