Educational Codeforces Round 53 (Rated for Div. 2) (前五题题解)
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,假如posbi < 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) (前五题题解)的更多相关文章
- Codeforces Round #519 by Botan Investments(前五题题解)
开个新号打打codeforces(以前那号玩废了),结果就遇到了这么难一套.touristD题用了map,被卡掉了(其实是对cf的评测机过分自信),G题没过, 700多行代码,码力惊人.关键是这次to ...
- Educational Codeforces Round 53 (Rated for Div. 2) E. Segment Sum (数位dp求和)
题目链接:https://codeforces.com/contest/1073/problem/E 题目大意:给定一个区间[l,r],需要求出区间[l,r]内符合数位上的不同数字个数不超过k个的数的 ...
- Educational Codeforces Round 53 (Rated for Div. 2)
http://codeforces.com/contest/1073 A. Diverse Substring #include <bits/stdc++.h> using namespa ...
- [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,如果 ...
- Educational Codeforces Round 53 (Rated for Div. 2) E. Segment Sum
https://codeforces.com/contest/1073/problem/E 题意 求出l到r之间的符合要求的数之和,结果取模998244353 要求:组成数的数位所用的数字种类不超过k ...
- 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 ...
- 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即可.(感 ...
- Educational Codeforces Round 53 (Rated for Div. 2) D. Berland Fair
题意:一个人 有T块钱 有一圈商店 分别出售 不同价格的东西 每次经过商店只能买一个 并且如果钱够就必须买 这个人一定是从1号店开始的!(比赛的时候读错了题,以为随意起点...)问可以买多少个 ...
- Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot
题意:给出一段操作序列 和目的地 问修改(只可以更改 不可以删除或添加)该序列使得最后到达终点时 所进行的修改代价最小是多少 其中代价的定义是 终点序号-起点序号-1 思路:因为代价是终点序号减去 ...
随机推荐
- Android ListView性能优化实例讲解
前言: 对于ListView,大家绝对都不会陌生,只要是做过Android开发的人,哪有不用ListView的呢? 只要是用过ListView的人,哪有不关心对它性能优化的呢? 关于如何对ListVi ...
- H3C RARP
- java 两种进程创建方式比较
A extends Thread: 简单 不能再继承其他类了(Java单继承) 同份资源不共享 A implements Runnable:(推荐) 多个线程共享一个目标资源,适合多线程处理同一份资源 ...
- laravel构造函数和中间件执行顺序问题
今天想重构下代码结构: BaseController.php 放置公共的中间件 class BaseController { public function __construct(){ $this- ...
- httpclient: Content-Length header already present问题
现象:用httpclient发送http请求时,客户端返回: org.apache.http.client.ClientProtocolException at org.apache.http.imp ...
- flex布局属性说明
flex布局又称为盒子布局或弹性布局,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为 Flex 布局. 给父容器添加display: flex/inline-flex;属性,即可使容器内容采 ...
- C# 如何写 DEBUG 输出
本文来告诉大家一个规范,如何去写 DEBUG 的输出. 经常在代码中,需要使用 DEBUG 来输出一些奇怪的东西来进行测试.但是输出的窗口只有一个,如果有一个逗比在不停输出,那么就会让输出窗口看不到自 ...
- Linux环境下安装mysql(远程连接),zookeeper,java,tomcat.
环境阿里云centos7.5 64位 + FinalShell + Navicat Permium 12 用到的压缩包(版本看后缀) 注意:安装均在/usr/local目录下,下面代码中#号不要复制上 ...
- 2018-2-13-win10-uwp-从Type使用构造
title author date CreateTime categories win10 uwp 从Type使用构造 lindexi 2018-2-13 17:23:3 +0800 2018-2-1 ...
- Java逻辑思维训练题
两柱香问题题目:有两柱不均匀的香,每柱香燃烧完需要1个小时,问:怎样用两柱香切出一个15分钟的时间段?这个题的重点就是怎么切. 答案:将甲香的一头点着,将乙香的两头点着,当乙香燃烧完时,说明已经过了半 ...