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. PHP 手机短信验证码 laravel 实现流程

    https://blog.csdn.net/uknow0904/article/details/80336941 本人在自己博客(Laravel)的注册部分 使用手机号注册,需要发送短信验证码. 使用 ...

  2. Top 10 Free IT Certification Training Resources

    1. Cybrary Cybrary takes the open source concept and applies it to IT training. Many of the courses ...

  3. @COCI 2016/2017 Round 3@ Meksikanac

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 在平面直角坐标系中,给定一个左下角为 (0, 0),右上角为 ( ...

  4. H3C V.35接口线缆

  5. 如何安装java环境和如何配置java环境

    https://jingyan.baidu.com/article/0202781175839b1bcc9ce529.html java如今是一门十分热门的可跨平台面向对象的高级编程语言,那么作为学习 ...

  6. Laravel 5.5 将会要求 PHP 7.0+

    Laravel 5.5 都要用 PHP7 了呢!你还在用 PHP 5 吗? Laravel 一直是一个精 (sheng) 进 (ji) 不 (hen) 休 (kuai) 的框架.就在前几天,下图这位 ...

  7. python深浅copy和赋值

    Python直接赋值,浅copy和深copy的比较 基于引用和对象(python引用和对象分离) 总结: 直接赋值:a = b -->a,b两个引用指向相同的对象 浅copy:a为b的copy ...

  8. Java反射机制(四):动态代理

    一.静态代理 在开始去学习反射实现的动态代理前,我们先需要了解代理设计模式,那何为代理呢? 代理模式: 为其他对象提供一种代理,以控制对这个对象的访问. 先看一张代理模式的结构图: 简单的理解代理设计 ...

  9. seo优化:302跳转变为301跳转

    <?php header("Location: http://www.XXX.com",TRUE,301); exit; ?> 要加exit;不加exit;还是会是30 ...

  10. H3C ACL规则的匹配顺序