Educational Codeforces Round 53 (Rated for Div. 2) (前五题题解)

这场比赛没有打,后来补了一下,第五题数位dp好不容易才搞出来(我太菜啊)。

比赛传送门:http://codeforces.com/contest/1073

A. Diverse Substring

题意:给你个字符串,让你找一个子串满足任意一个字符的个数不超过其他字符的总和,输出yes或no表示否存在,如果存在输出任意一个。

这题只要找两个不同的相邻字符,因为两个字符各一个都不超过其他字符的总和,如果字符串只由一个字符组成或长度等于一才会不存在。

代码如下:

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define rep(x, l, r) for(int x = (int)l; x <= (int)r; x++)
#define repd(x, r, l) for(int x = (int)r; x >= (int)l; x--)
#define clr(x,y) memset(x, y, sizeof(x))
#define mp(x, y) make_pair(x, y)
#define all(x) begin(x), end(x)
#define MAXN 1005
#define fi first
#define se second;
#define Size(x) ((int)size(x))
using namespace std;
typedef long long LL;
typedef vector<int> vi;
typedef pair<int, int> pii;
const int INF = << ;
const int p = ;
//head by DYH char st[MAXN]; int main(){
int n;
scanf("%d", &n);
scanf("%s", st);
int len = strlen(st);
char ch = st[];
rep(i, , len - ){
if(st[i] != ch){
puts("YES");
printf("%c%c\n", ch, st[i]);
return ;
}
}
puts("NO");
return ;
}

Problem-A

B.Vasya and Books

题意:有n本书在一个栈中,依次为a1, a2, …, an,现在有n个操作,对于每个操作i,将从栈顶到书本bi的所有书全部放入包中,如果已经在包中,就不进行操作。问你每次操作需要放几本书。

这题可以记录下对于每本书i在栈中的位置posi,然后再记录上一次操作后放入包的书本数used,假如posb < used, 那么这次需要放入used - posbi 本书,否则就为0。

代码如下:

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define rep(x, l, r) for(int x = (int)l; x <= (int)r; x++)
#define repd(x, r, l) for(int x = (int)r; x >= (int)l; x--)
#define clr(x,y) memset(x, y, sizeof(x))
#define mp(x, y) make_pair(x, y)
#define all(x) begin(x), end(x)
#define MAXN 200005
#define fi first
#define se second;
#define Size(x) ((int)size(x))
using namespace std;
typedef long long LL;
typedef vector<int> vi;
typedef pair<int, int> pii;
const int INF = << ;
const int p = ;
//head by DYH int id[MAXN]; int main(){
int n;
scanf("%d", &n);
rep(i, , n){
int x;
scanf("%d", &x);
id[x] = i;
}
int used = ;
rep(i, , n){
int x;
scanf("%d", &x);
if(id[x] > used){
printf("%d ", id[x] - used);
used = id[x];
}
else printf("0 ");
}
puts("");
return ;
}

Problem-B

C.Vasya and Robot

题意:有一个机器人,有四种移动的操作。

  • U — move from (x,y)(x,y) to (x,y+1)(x,y+1);
  • D — move from (x,y)(x,y) to (x,y−1)(x,y−1);
  • L — move from (x,y)(x,y) to (x−1,y)(x−1,y);
  • R — move from (x,y)(x,y) to (x+1,y)(x+1,y).

现在有一个由操作指令组成的字符串,让你修改一些操作,使得机器人从(0, 0)走到(x, y),并且maxID - minID + 1最小,即修改最小的长度的子串。如果怎么更改都无法到达,输出-1。

这题用二分法和尺取法都可以做,也很好证明,就是在判断的时候有点麻烦。

对于每一个[l, r]的区间,最简单的方法就是现将这段区间全部删去,求出此时机器人到达的点(x2, y2)。如果进行r - l + 1次操作就能到达(x, y),即abs(x2 - x) + abs(y2 - y) <= r - l + 1,前提是同奇偶。

能否到达也无需另外判断,直接把答案的初值赋为-1即可。(然而我是一开始就判断的)

代码如下:

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define rep(x, l, r) for(int x = (int)l; x <= (int)r; x++)
#define repd(x, r, l) for(int x = (int)r; x >= (int)l; x--)
#define clr(x,y) memset(x, y, sizeof(x))
#define mp(x, y) make_pair(x, y)
#define all(x) begin(x), end(x)
#define MAXN 200005
#define fi first
#define se second
#define Size(x) ((int)size(x))
using namespace std;
typedef long long LL;
typedef vector<int> vi;
typedef pair<int, int> pii;
const int INF = << ;
const int p = ;
//head by DYH pii t, sum[MAXN];
int len;
char st[MAXN]; bool judge(int l, int r){
return abs(t.fi - (sum[len].fi - sum[r].fi + sum[l - ].fi)) + abs(t.se - (sum[len].se - sum[r].se + sum[l - ].se)) <= r - l + ;
} int main(){
scanf("%d", &len);
scanf("%s", st);
rep(i, , len){
if(st[i - ] == 'U') sum[i].fi = sum[i - ].fi, sum[i].se = sum[i - ].se + ;
if(st[i - ] == 'D') sum[i].fi = sum[i - ].fi, sum[i].se = sum[i - ].se - ;
if(st[i - ] == 'L') sum[i].fi = sum[i - ].fi - , sum[i].se = sum[i - ].se;
if(st[i - ] == 'R') sum[i].fi = sum[i - ].fi + , sum[i].se = sum[i - ].se;
}
int x, y;
scanf("%d%d", &x, &y);
if(abs(x) + abs(y) > len || abs(abs(x) + abs(y) - len) & ){
puts("-1");
return ;
}
t = mp(x, y);
int l = , r = , ans = INF;
while(r <= len){
while(judge(l, r)){
ans = min(ans, r - l + );
l++;
}
r++;
}
printf("%d\n", ans);
return ;
}

Problem-C

D:Berland Fair

题意:有n个摊位,在第i个摊位可以花费ai买到一个糖果。现在有一个人有m块钱,从摊位1出发,每到一个摊位如果当前的钱数大于ai,他就会买一个糖果,然后前往第i + 1个摊位(如果i == n,就到第1个摊位)。问你他会买多少颗糖果。(他会一直买直到在任何摊位都买不了糖果)

这题看上去很麻烦(也许是我太弱了,大佬勿喷),其实只要判断

noip结束,要搞文化课了……没空啊。

Educational Codeforces Round 53 (Rated for Div. 2) (前五题题解)的更多相关文章

  1. Codeforces Round #519 by Botan Investments(前五题题解)

    开个新号打打codeforces(以前那号玩废了),结果就遇到了这么难一套.touristD题用了map,被卡掉了(其实是对cf的评测机过分自信),G题没过, 700多行代码,码力惊人.关键是这次to ...

  2. Educational Codeforces Round 53 (Rated for Div. 2) E. Segment Sum (数位dp求和)

    题目链接:https://codeforces.com/contest/1073/problem/E 题目大意:给定一个区间[l,r],需要求出区间[l,r]内符合数位上的不同数字个数不超过k个的数的 ...

  3. Educational Codeforces Round 53 (Rated for Div. 2)

    http://codeforces.com/contest/1073 A. Diverse Substring #include <bits/stdc++.h> using namespa ...

  4. [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,如果 ...

  5. Educational Codeforces Round 53 (Rated for Div. 2) E. Segment Sum

    https://codeforces.com/contest/1073/problem/E 题意 求出l到r之间的符合要求的数之和,结果取模998244353 要求:组成数的数位所用的数字种类不超过k ...

  6. Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot 【二分 + 尺取】

    任意门:http://codeforces.com/contest/1073/problem/C C. Vasya and Robot time limit per test 1 second mem ...

  7. Educational Codeforces Round 53 (Rated for Div. 2)G. Yet Another LCP Problem

    题意:给串s,每次询问k个数a,l个数b,问a和b作为后缀的lcp的综合 题解:和bzoj3879类似,反向sam日神仙...lcp就是fail树上的lca.把点抠出来建虚树,然后在上面dp即可.(感 ...

  8. Educational Codeforces Round 53 (Rated for Div. 2) D. Berland Fair

    题意:一个人  有T块钱 有一圈商店 分别出售 不同价格的东西  每次经过商店只能买一个  并且如果钱够就必须买 这个人一定是从1号店开始的!(比赛的时候读错了题,以为随意起点...)问可以买多少个 ...

  9. Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot

    题意:给出一段操作序列 和目的地 问修改(只可以更改 不可以删除或添加)该序列使得最后到达终点时  所进行的修改代价最小是多少 其中代价的定义是  终点序号-起点序号-1 思路:因为代价是终点序号减去 ...

随机推荐

  1. Twitter 宣布抛弃 Mesos,全面转向Kubernetes

    摘要: 从最早Mesos“代言人”到如今的全面转向“Kubernetes Native”,Twitter的举动再一次佐证了‘Kuberentes已经成为容器编排事实标准’这一断言. 本文作者:张磊 阿 ...

  2. h3c 广域网与OSI参考模型

  3. SuperSocket命令和命令加载器

    关键字: 命令, 命令加载器, 多命令程序集 命令 (Command) SuperSocket 中的命令设计出来是为了处理来自客户端的请求的, 它在业务逻辑处理之中起到了很重要的作用. 命令类必须实现 ...

  4. [转][ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [上篇]

    微软在千禧年推出 .NET战略,并在两年后推出第一个版本的.NET Framework和IDE(Visual Studio.NET 2002,后来改名为Visual Studio),如果你是一个资深的 ...

  5. HOSt ip is not allowed to connect to this MySql server, MYSQL添加远程用户或允许远程访问三种方法

    HOSt ip is not allowed to connect to this MySql server 报错:1130-host ... is not allowed to connect to ...

  6. html(三)注册页面与重定向

    注册和登陆的建立是通过界面post提交表单然后在测试界面获取提交的值,进行判断. 1.测试传来的值,是否为空,将值传回到测试界面: ("Reg.jsp?errorCode=" + ...

  7. 小程序与HTML5的区别

    小程序与传统HTML5还是有明显的区别,主要区别在于: 开发工具不同: 区别于H5的开发工具+浏览器Device Mode预览的模式,小程序的开发基于自己的开发者工具,可以实现同步本地文件+开发调试+ ...

  8. Oracle备库宕机启动解决方案

    简介 ORA-10458: standby database requires recovery ORA-01196: 文件 1 由于介质恢复会话失败而不一致 ORA-01110: 数据文件 1: ' ...

  9. oracle 包 简单使用

    理解PL/SQL包 简介 包(package)的主要作用是用于逻辑组合相关的PL/SQL类型 比如记录类型或者集合类型,PL/SQL游标或游标声明以及PL/SQL子程序 还可以包含任何可以在块的声明区 ...

  10. <Standard Template Library>标准模板库专项复习总结(一)

    看了看博客园的申请时间也一年多了...想想自己一年多以来一直处于各种划水状态,现在又要面临ACM的冲击... 还是要抓紧时间赶紧复习一下了- -毕竟校园新生赛还是有奖金的.. 1.栈 先进后出(LIF ...