Codeforces-Educational Codeforces Round 53题解
写之前,先发表下感慨:好久没写题解了,也许是因为自己越来越急利了,也可以说是因为越来越懒了。
A. Diverse Substring
直接找一找有没有相邻的两个不同的字符即可。
B. Vasya and Books
分别记录书本摆放顺序$a[]$,取书顺序$b[]$,每本书的位置$pos[]$,每本书在不在书堆上$in[]$,书堆最顶端的书的位置$top$(因为用的是数组,元素位置是固定的)。
然后,按照题意枚举输入的取书顺序$b[]$,同时记录答案$ans$,更新$top$即可。
C. Vasya and Robot
过滤掉目的地坐标累加和的绝对值和指令长度奇偶性不相同的情况。然后,剩余的所有情况,要么指令步数不够,要么一定有解。此时,答案满足单调性(如果不提前过滤掉奇偶性不同的情况,答案不满足单调性),二分答案即可。具体做法是,预处理出$x$轴方向的前缀和(向右$+1$,向左$-1$)和后缀和,以及$y$轴方向的前缀和(向上$+1$,向下$-1$)和后缀和,二分答案时,直接枚举区间左端点,然后$O(1)$检查枚举区间之外的$x$轴方向和$y$轴方向所需要改变的步数是不是小于二分枚举的区间长度。注意,这个地方只能用$\le$,不能用$==$,否则,会错在这样的样例上:
RRRRRRR
具体代码如下(附个人自用的测试样例):
#include<bits/stdc++.h>
using namespace std;
int n;
];
int dx,dy;
],postx[];
],posty[];
bool can(int len){
;i+len-<=n;++i){
]+postx[i+len]));
]+posty[i+len]));
if(needx+needy==len){
;
}
}
;
}
int main() {
,cnty=;
scanf(,&dx,&dy);
;i<=n;++i){
prex[i]=prex[i-],prey[i]=prey[i-];
if(s[i]=='L')prex[i]--,cntx--;
else if(s[i]=='R')prex[i]++,cntx++;
else if(s[i]=='D')prey[i]--,cnty--;
else if(s[i]=='U')prey[i]++,cnty++;
}
;--i){
postx[i]=postx[i+],posty[i]=posty[i+];
if(s[i]=='L')postx[i]--;
else if(s[i]=='R')postx[i]++;
else if(s[i]=='D')posty[i]--;
else if(s[i]=='U')posty[i]++;
}
!=(abs(cntx)+abs(cnty))%);
,high=n+,mid;
){
mid=(low+high)/;
if(can(mid))high=mid;
else low=mid;
}
)printf("%d\n",high);
else puts("-1");
;
}
/*
7
RRRRRRR
3 0
7
LRLRLRR
3 2
3
UUU
0 2
7
RRRUUUU
1 5
6
UUUUUU
0 6
5
DDDDD
0 1
7
RRRUUUL
7 0
4
URDL
0 0
3
DDD
0 0
2
RR
0 0
16
UUUUUUUUUUUUUUUU
0 15
2
LD
-1 -1
5
RURUU
-2 3
6
RRRUUU
2 -2
**/
D. Berland Fair
①先考虑$T$大于序列和的情况:此时,$ans+=\frac{T}{序列和}*序列长度$,同时$T%=序列和$;
②当$T$小于序列和时,枚举序列的所有元素,如果$a[i]\le T$,那么$T-=a[i],ans+=1$,并且把$a[i]$放到一个临时序列中,同时记录这些$a[i]$的和,枚举原序列结束后,用临时序列替换原序列,回到步骤①。当临时序列为空时,说明没有$a[i]\le T$,那么,退出循环,输出答案。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define pb(x) push_back(x)
LL n,a[];
int main() {
LL tot,sum=,ans=;
vector<LL> v,tmp;
scanf("%lld%lld",&n,&tot);
;i<=n;++i)scanf("%lld",a+i),v.pb(a[i]),sum+=a[i];
){
if(tot>=sum){
ans+=(tot/sum)*(LL)v.size();
tot%=sum;
}
tmp.clear();
sum=;
;i<v.size();++i){
if(v[i]<=tot){
tot-=v[i];
sum+=v[i];
ans++;
tmp.pb(v[i]);
}
}
)break;
v.assign(tmp.begin(),tmp.end());
}
printf("%lld\n",ans);
;
}
/*
3 1000000000000000000
1000000000 1000000000 1000000000
7 1000000000000000000
1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000
6 1000000000000000000
1 1000000000 1 1000000000 1000000000 1000000000
**/
E. Segment Sum
裸的数位$dp$。$dp[pos][sum][bit]$表示前面的数位累加和为$sum$,前面使用过的数字的二进制表示为$bit$时,从$pos$位开始往下搜索,后面的数位随意组合,可以搜索到的满足条件的数字个数以及他们的和。$dp$数组用$pair<long\ long,long\ long>$表示。注意,$dp[pos][sum][bit].second$是表示从$pos$位开始往下搜索,搜到的满足条件的数字的后$pos$位的和。前面的权值部分不算,否则就乱套了。另外,是和,也就是权值和,相当于取后半截作为一个数字的值,而不是数位和。
#include<bits/stdc++.h>
using namespace std;
#define pb(x) push_back(x)
#define mk(x, y) make_pair(x, y)
typedef long long LL;
typedef pair<LL,LL> pll;
LL x,y,k;
;
],dn;
pll dp[][][];
LL pow10[];
pll dfs(int pos,int sum,int bit,bool limit,bool lead){
)return __builtin_popcount(bit)<=k?mk(1LL,0LL):mk(0LL,0LL);
)return dp[pos][sum][bit];
pll ans=mk(,);
,top=limit?digit[pos]:;i<=top;++i){
pll pp=dfs(pos-,sum+i,lead&&i==?bit:bit|(<<i),limit&&i==top,lead&&i==);
ans.first+=pp.first%mod;
ans.second+=(i*pow10[pos-]%mod*pp.first%mod+pp.second)%mod;
if(ans.second>=mod)ans.second%=mod;
}
if(!limit)dp[pos][sum][bit]=ans;
return ans;
}
LL solve(LL v){
);
dn=;
){
digit[++dn]=v%;
v/=;
}
,,,).second;
}
int main() {
pow10[]=1LL;
;i<=;++i)pow10[i]=pow10[i-]*10LL;
memset(dp,-,sizeof(dp));
scanf("%lld%lld%lld",&x,&y,&k);
printf())%mod);
;
}
/*
1 100000000 9
**/
F. Choosing Two Paths
G. Yet Another LCP Problem
Codeforces-Educational Codeforces Round 53题解的更多相关文章
- 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 ...
- [codeforces][Educational Codeforces Round 53 (Rated for Div. 2)D. Berland Fair]
http://codeforces.com/problemset/problem/1073/D 题目大意:有n个物品(n<2e5)围成一个圈,你有t(t<1e18)元,每次经过物品i,如果 ...
- Codeforces Educational Codeforces Round 54 题解
题目链接:https://codeforc.es/contest/1076 A. Minimizing the String 题意:给出一个字符串,最多删掉一个字母,输出操作后字典序最小的字符串. 题 ...
- Codeforces Educational Codeforces Round 57 题解
传送门 Div 2的比赛,前四题还有那么多人过,应该是SB题,就不讲了. 这场比赛一堆计数题,很舒服.(虽然我没打) E. The Top Scorer 其实这题也不难,不知道为什么这么少人过. 考虑 ...
- Codeforces Educational Codeforces Round 5 E. Sum of Remainders 数学
E. Sum of Remainders 题目连接: http://www.codeforces.com/contest/616/problem/E Description The only line ...
- Codeforces Educational Codeforces Round 5 D. Longest k-Good Segment 尺取法
D. Longest k-Good Segment 题目连接: http://www.codeforces.com/contest/616/problem/D Description The arra ...
- Codeforces Educational Codeforces Round 5 C. The Labyrinth 带权并查集
C. The Labyrinth 题目连接: http://www.codeforces.com/contest/616/problem/C Description You are given a r ...
- Codeforces Educational Codeforces Round 5 B. Dinner with Emma 暴力
B. Dinner with Emma 题目连接: http://www.codeforces.com/contest/616/problem/A Description Jack decides t ...
随机推荐
- day 56 jQuery学习
1.补充:each 描述:一个通用的迭代函数,它可以用来无缝迭代对象和数组.数组和类似数组的对象通过一个长度属性(如一个函数的参数对象)来迭代数字索引,从0到length - 1.其他对象通过其属性名 ...
- nginx与Apache的优缺点
来源:http://itindex.net/detail/46414-apache-nginx 1.nginx相对于apache的优点: 轻量级,同样起web 服务,比apache 占用更少的内存及资 ...
- python之路---09 初始函数 参数
二十七.初始函数 1.函数: 对代码块和功能的封装和定义 2.格式及语法 def 函数名() # 定义 函数体 函数名() # 调用 3. r ...
- Spring 框架的历史
2002 年 10 月,Rod Johnson 撰写了一本名为 Expert One-on-One J2EE 设计和开发的书.本书由 Wrox出版,介绍了当时 Java 企业应用程序开发的情况,并指出 ...
- 寻找“最好”(4)——不等约束和KKT条件
不等约束 上篇文章介绍了如何在等式约束下使用拉格朗日乘子法,然而真实的世界哪有那么多等式约束?我们碰到的大多数问题都是不等约束.对于不等约束的优化问题,可以这样描述: 其中f(x)是目标函数,g(x) ...
- [转]java虚拟机工作原理详解
一.类加载器 首先来看一下java程序的执行过程. 从这个框图很容易大体上了解java程序工作原理.首先,你写好java代码,保存到硬盘当中.然后你在命令行中输入 javac YourClassNam ...
- Redis 多个数据库
注意:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念. Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存 ...
- node api 之:Buffer
在 ECMAScript 2015 引入 TypedArray 之前,JavaScript 语言没有读取或操作二进制数据流的机制. Buffer 类被引入作为 Node.js API 的一部分,使其可 ...
- href="javacript:;" href="javacript:void(0);" href="#"区别。。。
一.href="javacript:;" 这种用法不正确,这么用的话会出现浏览器访问“javascript:;”这个地址的现象: 二.href="javacript:v ...
- 基于MVC4+EasyUI的Web开发框架形成之旅(5)--框架总体界面介绍
在前面介绍了一些关于最新基于MVC4+EasyUI的Web开发框架文章,虽然Web开发框架的相关技术文章会随着技术的探讨一直写下去,不过这个系列的文章,到这里做一个总结,展示一下整体基于MVC4+Ea ...