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 < ...
随机推荐
- OBKoro1的2020年年终总结
前言 一晃眼2020年马上就要过去了,今年感觉过的特别快. 工作已经三年了,之前都没有写过年终总结,结果造成了下面这个现象: 回首过去的几年,记忆已经很模糊了,需要很用力才能想起过去一部分往事. 人生 ...
- jquery表格插件Datatables使用、快速上手
Datatables使用 一.简介 官网:https://datatables.net/ 中文官网:http://datatables.club/ Datatables是一款jquery表格插件.它是 ...
- 【C++】《Effective C++》第三章
第三章 资源管理 条款13:以对象管理资源 当申请一块动态内存时,可能会发生内存泄漏. class Investment {}; void f() { Investment* pInv = creat ...
- 【Problems】MySQL5.7 datetime 默认值设为‘0000-00-00 00:00:00'值出错
记录 MySQL5.7 datetime 默认值设为'0000-00-00 00:00:00'值出错 我的MySQL版本 mysql --version 5.7.28 C:\Users\x1c> ...
- python sqlite3增加表字段
给sqlite3表格增加新字段,要注意大小写,要不然不成功. 一开始这样写,不成功! 后面规范写,按大小写严格规范写! 成功了!现在查看新增加的字段commit: 仔细看,这下全部小写,括表名称.co ...
- UVM基础总结——基于《UVM实战》示例
一.前言 工作一直在做SoC验证,更关注模块间的连接性和匹配性,所以相比于擅长随机约束激励的UVM来说,定向测试的概念更容易debug.当然前提是IP已经被充分验证.因此觉得接触UVM的机会较少.到现 ...
- linux下安装nacos
一.安装 1.下载安装包: https://github.com/alibaba/nacos/releases 2.解压 : tar -xzvf nacos-server-1.2.1.tar.gz 3 ...
- [Usaco2007 Jan]Balanced Lineup 飞盘比赛
题目描述 每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连续的牛来进行 ...
- .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、自动化部署)
通过前面三篇: .NET Core部署到linux(CentOS)最全解决方案,常规篇 .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx) .N ...
- 解决Ajax同源政策的方法【JSONP + CORS + 服务器端解决方案】
解决Ajax同源政策的方法 使用JSONP解决同源限制问题 jsonp是json with padding的缩写,它不属于Ajax请求,但它可以模以Ajax请求.\ 步骤 1.将不同源的服务器端请求地 ...