Educational Round 66 题解
作为橙名来水了一发……
这次题目就比上次良心多了。7题有5题会做。
然而风格仍然很怪异……还是练少了?
A
水题。不过一开始没注意细节挂了几发,罚时罚的真痛……
明显是能除以 $k$ 就除以 $k$,否则就 $-1$。但注意不能直接最裸的模拟。
时间复杂度 $O(T\log n)$。
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> PII; const int maxn=100010; #define MP make_pair #define PB push_back #define lson o<<1,l,mid #define rson o<<1|1,mid+1,r #define FOR(i,a,b) for(int i=(a);i<=(b);i++) #define ROF(i,a,b) for(int i=(a);i>=(b);i--) #define MEM(x,v) memset(x,v,sizeof(x)) inline ll read(){char ch=getchar();ll x=0,f=0;while(ch<'0' || ch>'9') f|=ch=='-',ch=getchar();while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return f?-x:x; } int t; ll n,k,cnt; int main(){t=read();while(t--){n=read();k=read();cnt=0;while(n){if(n%k==0) n/=k,cnt++;else{ll t=n/k*k;cnt+=n-t;n=t;}}cout<<cnt<<endl;} }
View Code
B
堪比NOIP2017D1T2的模拟程序。
有很多细节,然后我的同学们就全挂了,就我一个幸存???
用 $y[i]$ 表示到第 $i$ 行时共会循环多少次,$hhh[i]$ 表示 $y[i]$ 是否溢出。
代码写着也不是很难受。时间复杂度 $O(n)$。
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> PII; const int maxn=100010; #define MP make_pair #define PB push_back #define lson o<<1,l,mid #define rson o<<1|1,mid+1,r #define FOR(i,a,b) for(int i=(a);i<=(b);i++) #define ROF(i,a,b) for(int i=(a);i>=(b);i--) #define MEM(x,v) memset(x,v,sizeof(x)) inline ll read(){char ch=getchar();ll x=0,f=0;while(ch<'0' || ch>'9') f|=ch=='-',ch=getchar();while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return f?-x:x; } int l,stk[maxn],tp; char op[maxn][10]; bool hhh[maxn]; ll x,y[maxn],a[maxn]; int main(){l=read();FOR(i,1,l){scanf("%s",op[i]+1);if(op[i][1]=='f') a[i]=read();}y[0]=1;FOR(i,1,l){if(op[i][1]=='f'){stk[++tp]=i;y[i]=y[i-1]*a[i];if(hhh[i-1] || y[i]>=(1ll<<32)) hhh[i]=true;}else{if(op[i][1]=='e') y[i]=y[stk[tp]-1],hhh[i]=hhh[stk[tp]-1],tp--;else{y[i]=y[i-1];hhh[i]=hhh[i-1];if(hhh[i]) return puts("OVERFLOW!!!"),0;x+=y[i];if(x>=(1ll<<32)) return puts("OVERFLOW!!!"),0;}}}cout<<x<<endl; }
View Code
C
有一点点点点的难度。
发现对于一个点,与它前 $k$ 近的点是一个长度为 $k$ 的区间。
枚举这个区间,对于一个区间最优答案在中点取得。对所有中点取个最优即可。
时间复杂度 $O(\sum n)$。
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> PII; const int maxn=200020; #define MP make_pair #define PB push_back #define lson o<<1,l,mid #define rson o<<1|1,mid+1,r #define FOR(i,a,b) for(int i=(a);i<=(b);i++) #define ROF(i,a,b) for(int i=(a);i>=(b);i--) #define MEM(x,v) memset(x,v,sizeof(x)) inline ll read(){char ch=getchar();ll x=0,f=0;while(ch<'0' || ch>'9') f|=ch=='-',ch=getchar();while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return f?-x:x; } int t,n,k,a[maxn],x,y; int main(){t=read();while(t--){n=read();k=read()+1;FOR(i,1,n) a[i]=read();y=1e9;FOR(l,1,n-k+1){int r=l+k-1,mid=(a[l]+a[r])>>1;if(a[r]-a[l]<y) y=a[r]-a[l],x=mid;}printf("%d\n",x);} }
View Code
D
比B和C还水的水题。
我们假设分割点是 $x_1,x_2,x_3,\cdots,x_{k-1},x_k$。注意 $x_1=1$。那么题目中的式子就是 $\sum suf[x_i]$。($suf$ 是后缀和)
那么在 $suf[2],suf[3],\cdots,suf[n]$ 中取前 $k-1$ 大,再与 $suf[1]$ 相加就是答案。
时间复杂度 $O(n\log n)$。
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> PII; const int maxn=300030; #define MP make_pair #define PB push_back #define lson o<<1,l,mid #define rson o<<1|1,mid+1,r #define FOR(i,a,b) for(int i=(a);i<=(b);i++) #define ROF(i,a,b) for(int i=(a);i>=(b);i--) #define MEM(x,v) memset(x,v,sizeof(x)) inline ll read(){char ch=getchar();ll x=0,f=0;while(ch<'0' || ch>'9') f|=ch=='-',ch=getchar();while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return f?-x:x; } int n,k,a[maxn]; ll suf[maxn],ans; int main(){n=read();k=read();FOR(i,1,n) a[i]=read();ROF(i,n,1) suf[i]=suf[i+1]+a[i];sort(suf+2,suf+n+1,greater<ll>());ans=suf[1];FOR(i,2,k) ans+=suf[i];cout<<ans; }
View Code
E
开始有难度了。
首先发现对于左端点相同的区间,只需要保留右端点最右的一个。
(以下设询问区间为 $[x,y]$)
然后假设 $[x,y_0]$ 已经被完全覆盖了,那么下一个要选的区间的左端点要 $\le y_0$,且右端点尽可能右。
设 $mx[l]$ 表示左端点 $\le l$ 的区间中的最右右端点。
那么问题就变成从 $x$ 开始跳,跳到 $mx[x]$,再跳到 $mx[mx[x]]$……一直跳跳到 $\ge y$ 为止,问要多少步。
那么就是显然的倍增了。
设 $to[i][j]$ 表示从 $i$ 开始跳 $2^j$ 会跳到哪。那么有 $to[i][0]=mx[i],to[i][j]=to[to[i][j-1]][j-1]$。
对于每个询问,先判无解。
否则从 $19$ 到 $0$ 枚举 $j$。如果 $to[x][j]<y$ 那么把 $x$ 跳到 $to[x][j]$。
这时当 $to[x][0]<y$ 那么无解,因为已经跳了 $2^20$ 步了,如果还没跳到那么说明没法再跳到了(只能在原地跳环)。否则因为有解,所以枚举完后再跳一步一定能 $\ge y$。
时间复杂度 $O(n+(q+A)\log A)$。($A$ 为端点坐标最大值)
代码细节,为了不让 $to[i][j]<i$,一开始把 $mx[i]$ 设成 $i$ 就行了,不影响答案。
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=500050; #define FOR(i,a,b) for(int i=(a);i<=(b);i++) #define ROF(i,a,b) for(int i=(a);i>=(b);i--) #define MEM(x,v) memset(x,v,sizeof(x)) inline ll read(){char ch=getchar();ll x=0,f=0;while(ch<'0' || ch>'9') f|=ch=='-',ch=getchar();while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return f?-x:x; } int n,m,k=500000,mx[maxn],to[maxn][20]; int main(){n=read();m=read();FOR(i,0,k) mx[i]=i;FOR(i,1,n){int l=read(),r=read();mx[l]=max(mx[l],r);}FOR(i,1,k) mx[i]=max(mx[i-1],mx[i]);FOR(i,0,k) to[i][0]=mx[i];FOR(j,1,19) FOR(i,0,k) to[i][j]=to[to[i][j-1]][j-1];while(m--){int x=read(),y=read(),cnt=0;ROF(i,19,0) if(to[x][i]<y) cnt+=1<<i,x=to[x][i];if(to[x][0]<y) puts("-1");else printf("%d\n",cnt+1);} }
View Code
F,G
还不会,以后再来搞。
转载于:https://www.cnblogs.com/1000Suns/p/10987043.html
Educational Round 66 题解相关推荐
- Educational Round 64 题解
前言: 这场太难了--我一个紫名只打出两题--(虽说感觉的确发挥不够好) 一群蓝绿名的dalao好像只打了两题都能升分的样子-- 庆幸的是最后A出锅然后unr了>///< 写一波题解纪念这 ...
- Educational Codeforces Round 95题解
Educational Codeforces Round 95题解 题目链接 代码链接 A. Buying Torches 题目大意: 你手上现在有一个木棍.有以下两种交换方式: 1.用一个木棍交换x ...
- [Educational Round 5][Codeforces 616F. Expensive Strings]
这题调得我心疲力竭...Educational Round 5就过一段时间再发了_(:з」∠)_ 先后找了三份AC代码对拍,结果有两份都会在某些数据上出点问题...这场的数据有点水啊_(:з」∠)_[ ...
- python第六章函数课后答案_浙大PTA-Python题库 函数题(6-1~6-6)题解
其他各章题解链接如下 浙大PTA-Python题库 编程题第一章(1-1~1-3)题解 https://blog.csdn.net/zimuzi2019/article/details/1070206 ...
- 浙大PTA-Python题库 函数题(6-1~6-6)题解
其他各章题解链接如下 浙大PTA-Python题库 编程题第一章(1-1~1-3)题解 https://blog.csdn.net/zimuzi2019/article/details/1070206 ...
- HDU 5597 GTW likes function(规律+欧拉函数模板题)——BestCoder Round #66(div.1 div.2)
GTW likes function Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Oth ...
- Codeforces Educational Round 5
Codeforces Educational Round 5 通过数: 4 Standing: 196/4176 题目链接: http://codeforces.com/contest/616 A: ...
- Educational Codeforces Round 66 (Rated for Div. 2) B. Catch Overflow!
链接:https://codeforces.com/contest/1175/problem/B 题意: You are given a function ff written in some bas ...
- Educational Codeforces Round 66 (Rated for Div. 2)
题意:求最小操作数 使得归零 两种操作 1 减一 2能被k整除的时候除k 签到题: 记得开ll即可 #include<bits/stdc++.h> using namespace ...
最新文章
- 计算机无法计算,计算器不能执行计算功能,运算结果始终为0
- Asp.net如何生成html静态页面
- CDH 元数据库升级
- Jqgrid pager 关于“local” dataType 动态加载数据分页的研究(没好用的研究结果)...
- 句子表示学习前沿技术分享
- pytorch l2正则化_理解机器学习中的 L2 正则化
- 如何引入colorui
- Matlab如何下载安装科研绘图工具Gramm并绘图
- 简化预测集合的永磁同步电机的无差拍预测转矩控制系统Simulink仿真
- 启动计算机命令,电脑启动项命令
- c51 c语言 16位二进制转换为bcd码,16位二进制转换为BCD码的C51汇编程序.doc
- c语言字母是怎么存储,C语言之数据在内存中的存储
- 如何制作一份疫情场所分布地图?(附数据和源码)
- u盘装服务器系统失败原因,u盘装系统引导失败原因及解决方案
- 统计学习(一):最大似然估计
- 出现`webpack-dev-server --inline --progress --config build/webpack.dev.conf.js`报错
- Java excel导出支持2007以上版本
- Java:文件写入读取操作和工具类
- 2019十佳DevOps工具,你用了几个?
- Caspase-1活性分析:艾美捷FAM-FLICA试剂盒解决方案
热门文章
- 2022-2028年中国碘矿行业竞争格局分析及市场需求前景报告
- 2021-2027年中国一次成型光学玻璃行业市场分析及投资潜力研究报告
- mybatis的资源过滤错误及xml文件编码错误
- API pytorch tensorflow
- ELECTRA 超过bert预训练NLP模型
- 受用一生的高效 PyCharm 使用技巧(六)
- 自动驾驶公司尴尬处境
- Cache 与Memory架构及数据交互
- 2021年大数据ZooKeeper(五):ZooKeeper Java API操作
- 2021年大数据Flink(三十九):​​​​​​​Table与SQL ​​​​​​总结 Flink-SQL常用算子