A. From Hero to Zero

通过取余快速运行第一步即可。由于\(a \% b (a >= b) <= \frac{a}{2}\)。所以总复杂度不超过\(O(log_2n)\)。

#include <cstdio>
#include <iostream>
using namespace std;
typedef long long LL;
int main(){
int T; scanf("%d", &T);
while(T--){
LL n, k, ans = 0;
scanf("%lld%lld", &n, &k);
while(n){
if(n % k) ans += n % k, n -= n % k;
if(n)n /= k, ans++;
}
printf("%lld\n", ans);
}
return 0;
}

B. Catch Overflow!

循环本质其实是栈的思想,可以用\(loop\)表示这层要循环多少次。注意如果直接乘可能爆\(long\ long\)。

其实当\(loop > 2 ^ {32} - 1\),后面的只要有\(add\)都不行了,所以只要用个\(flag\)记录就行了...

#include <cstdio>
#include <iostream>
#include <string>
#include <stack>
using namespace std;
typedef long long LL;
const LL INF = (1ll << 32) - 1;
LL n = 0, loop = 1;
stack<int> s;
string ch;
int x, flag = 0;
int main(){
ios::sync_with_stdio(false);
int T; cin >> T;
while(T--){
cin >> ch;
if(ch == "add"){
if(loop > INF){
cout << "OVERFLOW!!!" << endl;
return 0;
}
n += loop;
}else if(ch == "for"){
cin >> x;
if(loop > INF) {
flag++;
continue;
}
s.push(x);
loop *= x;
}else if(ch == "end"){
if(flag) {
flag --;
continue;
}
loop /= s.top();
s.pop();
}
if(n > INF){
cout << "OVERFLOW!!!" << endl;
return 0;
}
}
cout << n << endl;
return 0;
}

C. Electrification

注意数据是单调递增的,所以容易想到最短的一段必然是连续的,因为通过绝对值变成正的值顺序一定是\(1, 2, 3....n\),所以每次变成正的后,它可能是最小的,也有可能大于后面的一些,因为减的多了,所以整个区间会往后移动。我们可以尝试枚举每一个\([i, i + k]\)的这个区间,发现能使最小的即变为\((a[i + k] - a[i]) / 2\),也就是全部都减\((a[i + k] - a[i]) / 2\)(可以向下取整)。可以用小根堆维护最小值。由于精度问题,第一个可以不用\(/2\)。

#include <cstdio>
#include <iostream>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
typedef pair<int, int> PII;
const int N = 200010;
int n, k, a[N];
priority_queue<PII, vector<PII>, greater<PII> > q;
int main(){
int T; scanf("%d", &T);
while(T--){
while(q.size()) q.pop();
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; i++)
scanf("%d", a + i);
for(int i = 1; i + k <= n; i++)
q.push(make_pair(a[i + k] - a[i], (a[i] + a[i + k]) / 2));
printf("%d\n", q.top().second);
}
return 0;
}

D. Array Splitting

非常巧妙的做法,观察到让我们求的值其实是每一段的和$ * $ 相应的段数,但其实可以发现,一个\(ans\)的组成为:

\(1 * A + 2 * B + 3 * C = (A + B + C) + (B + C) + C\)。实质上就是找到\(k\)个后缀和,将他们加起来求最大值。这样直接贪心求解即可,记得\([1, n]\)这个区间必须选。

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 300010;
typedef long long LL;
int n, k, a[N];
LL ans, sum[N];
int main(){
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; i++)
scanf("%d", a + i);
for(int i = n; i; i--)
sum[i] = sum[i + 1] + a[i];
sort(sum + 2, sum + 1 + n);
ans = sum[1];
for(int i = n; i >= n - k + 2; i--) ans += sum[i];
printf("%lld\n", ans);
return 0;
}

E. Minimal Segment Cover

注意到\(l\)和\(r\)的范围并不大,我们可以预处理出从\(l\)出发最远能到哪里(一条线段),注意\(l\)也可以是中间点。这样我们只需要逐个枚举即可。时间复杂度\(SIZE ^ 2\),可以用倍增的形式优化。具体方式很像\(LCA\),预处理每个\(l\)跳\(2 ^ p(0 <= p <= \lfloor log_2500000 \rfloor)\)能到哪里即可。本质上就是枚举答案的二进制位即可。

时间复杂度\(O(slog_2s)\)(\(s\)是数字范围)

注意预处理顺序,要么\(i\)倒序枚举,要么\(j\)在第一个条件,否则没有正确的转移。

#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
const int N = 200010, SIZE = 500010, L = 19;
int n, m, maxS = -1, f[SIZE][L];
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++){
int l, r; scanf("%d%d", &l, &r);
f[l][0] = max(f[l][0], r);
maxS = max(maxS, r);
}
for(int i = 1; i <= maxS; i++)
f[i][0] = max(f[i][0], f[i - 1][0]); for(int j = 1; j < L; j++)
for(int i = 0; i <= maxS; i++)
f[i][j] = f[f[i][j - 1]][j - 1]; for(int i = 1; i <= m; i++){
int x, y, ans = 0; scanf("%d%d", &x, &y);
for(int i = L - 1; ~i; i--)
if(f[x][i] < y) x = f[x][i], ans |= 1 << i;
if(f[x][0] >= y) printf("%d\n", ans + 1);
else puts("-1");
}
return 0;
}

Codeforces Edu Round 66 A-E的更多相关文章

  1. CFEducational Codeforces Round 66题解报告

    CFEducational Codeforces Round 66题解报告 感觉丧失了唯一一次能在CF上超过wqy的机会QAQ A 不管 B 不能直接累计乘法打\(tag\),要直接跳 C 考虑二分第 ...

  2. Educational Codeforces Round 66 差G

    Educational Codeforces Round 66 F 题意:长度为 n 的序列,求有多少个区间 \([l,r]\) ,使得其构成了一个 1~r-l+1 的排列. \(n \le 3*10 ...

  3. Codeforces Beta Round #61 (Div. 2)

    Codeforces Beta Round #61 (Div. 2) http://codeforces.com/contest/66 A 输入用long double #include<bit ...

  4. Codeforces Beta Round #80 (Div. 2 Only)【ABCD】

    Codeforces Beta Round #80 (Div. 2 Only) A Blackjack1 题意 一共52张扑克,A代表1或者11,2-10表示自己的数字,其他都表示10 现在你已经有一 ...

  5. Codeforces Beta Round #62 题解【ABCD】

    Codeforces Beta Round #62 A Irrational problem 题意 f(x) = x mod p1 mod p2 mod p3 mod p4 问你[a,b]中有多少个数 ...

  6. Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】

    Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...

  7. Codeforces Beta Round #13 C. Sequence (DP)

    题目大意 给一个数列,长度不超过 5000,每次可以将其中的一个数加 1 或者减 1,问,最少需要多少次操作,才能使得这个数列单调不降 数列中每个数为 -109-109 中的一个数 做法分析 先这样考 ...

  8. CodeForces Global Round 1

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

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

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

随机推荐

  1. socket connect tcp_v4_connect

    tcp_v4_connect /* This will initiate an outgoing connection. tcp_v4_connect函数初始化一个对外的连接请求,创建一个SYN包并发 ...

  2. 154. Find Minimum in Rotated Sorted Array II(循环数组查找)

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

  3. 内核补丁热更新ceph内核模块

    前言 内核模块的更新一般需要卸载模块再加载,但是很多时候使用场景决定了无法做卸载的操作,而linux支持了热更新内核模块的功能,这个已经支持了有一段时间了,一直没有拿ceph的相关模块进行验证 准备工 ...

  4. 检查linux下服务器的带宽

    设想:公司 A 有一个名为 bsdocfs 的存储服务器,并通过名为 beckham 的客户端节点装载 NFS.公司 A 确定他们需要从 bsdocfs得到更多的带宽,因为有大量的节点需要访问 bsd ...

  5. 不同角度看Handler——另类三问

    之前有一章节介绍了Handler的常见面试题,今天就来说说另类的,可能你没关注的其他问题,一起看看吧. 系统为什么提供Handler 这点大家应该都知道一些,就是为了切换线程,主要就是为了解决在子线程 ...

  6. openstack常用命令-nova篇

    1.查看openstack版本 nova-manage version 2.查看节点 nova host-list 3.查看计算节点 nova hypervisor-list 4.查看计算节点上有哪些 ...

  7. js-根据日期获取本年所有周日

    /** * 方法 描述 Date() 返回当日的日期和时间. getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31). getDay() 从 Date 对象返回一周中的某一天 ( ...

  8. kali ms17_010 内网环境下渗透笔记

    一.先用Router Scan 扫描 看清楚了网络拓扑结构. 二.使用MS17-010批量扫描工具 下载:ms17-010Scan.exe  (也可以用kali自带的nmap和ms17-10模块扫) ...

  9. Spring Cloud实战 | 第九篇:Spring Cloud整合Spring Security OAuth2认证服务器统一认证自定义异常处理

    本文完整代码下载点击 一. 前言 相信了解过我或者看过我之前的系列文章应该多少知道点我写这些文章包括创建 有来商城youlai-mall 这个项目的目的,想给那些真的想提升自己或者迷茫的人(包括自己- ...

  10. vue的html2canvas将dom转化为图片时踩得坑

    一.html2canvas中图片涉及跨域图片 应用场景:做个投票活动,将参赛者的信息转化成图片截图分享.用户上传图片上传到腾讯云cos桶中,html2canvas只能转换本地资源的图片,涉及跨域的图片 ...