地址:http://codeforces.com/contest/1272

A. Three Friends

仔细读题能够发现|a-b| + |a-c| + |b-c| = |R-L|*2 (其中L = min{a, b, c}, R = max{a, b, c})

那么本题的移动条件就只考虑两个端点L, R即可,答案即为 |(L+1)-(R-1)| 即L向右移动1,R向左移动1,在此之前判断一下原L,R之间的距离是否<=2,<=2输出0

#include <bits/stdc++.h>
using namespace std; int q, a[];
int main(){
ios::sync_with_stdio();
cin.tie(); cout.tie();
cin >> q;
while( q-- ){
for( int i=; i<; i++ ) cin >> a[i];
sort(a, a+);
if( a[]-a[]<= ) cout << "" << endl;
else cout << (a[]-a[]-)* << endl;
} return ;
}

A.Three Friends

B.Snow Walking Robot

这题比赛时没做出来??理解题意出了锅。

思路:如果能够回到(0, 0)需满足数量U=D且R=L,只需要上下方向选min(U, D),左右方向选min(L, R)。

如果U=0或D=0那么就要删除所有的另外一个方向,且将左右方向置为1(min(L, R)>0),对于R和L也一样要满足该条件,上下方向置为1(min(U, D)>0)

然后最后组合的时候只需要让路径构成一个环即可,这个组合可以任意组合,做题的时候卡在这了。。。

#include <bits/stdc++.h>
using namespace std; int q, cl, cr, cu, cd;
string s;
int main(){
// freopen("in.txt", "r", stdin);
ios::sync_with_stdio();
cin.tie(); cout.tie();
cin >> q;
while( q-- ){
cin >> s;
cl = cr = cu = cd = ;
for( char i:s ){
cl += i=='L';
cr += i=='R';
cu += i=='U';
cd += i=='D';
}
cu = min(cu, cd);
cl = min(cl, cr);
if( cu== || cl== ){
cl = min(, cl);
cu = min(, cu);
}
string ans;
for( int i=; i<cl; i++ ) ans += 'R';
for( int i=; i<cu; i++ ) ans += 'U';
for( int i=; i<cl; i++ ) ans += 'L';
for( int i=; i<cu; i++ ) ans += 'D';
cout << ans.size() << endl << ans << endl;
} return ;
}

B.Snow Walking Robot

C.Yet Another Broken Keyboard

给k个字母问这k的字母能构成字符串s中多少个子串。

set存一下这k个字母,对s中每一段连续的可以在set中查找到的分别进行统计汇总即可,每一段长度len_i对答案的贡献为(len_i)*(len_i+1)/2.

#include <bits/stdc++.h>
using namespace std; typedef long long ll;
int n, k;
string s;
set<char> a;
ll ans, tmp;
int main(){
ios::sync_with_stdio();
cin.tie(); cout.tie();
cin >> n >> k >> s;
for( int i=; i<k; i++ ){
char ch;
cin >> ch;
a.insert(ch);
}
int len = s.size();
for( int i=; i<len; i++ ){
if( a.find(s[i])!=a.end() )
tmp ++;
else{
ans += tmp*(tmp+)/;
tmp = ;
}
}
if(tmp) ans += tmp*(tmp+)/;
cout << ans << endl; return ;
}

C.Yet Another Broken Keyboard

D. Remove One Element

三遍预处理 + 一遍原序列

第一遍预处理处理出来一个数不删的最大长度。

第二遍预处理从i from 1~n记录l[i]从左到右递增的最长连续序列长度。

第三遍预处理从i from n~1记录r[i]从右到左递减的最长连续序列长度。

最后跑原序列i from 1~n判断删除i之后的结果能否更新第一遍记录的答案

#include <bits/stdc++.h>
using namespace std; const int maxn = 2e5 + ;
int a[maxn], n, l[maxn], r[maxn], ans;
int main(){
ios::sync_with_stdio();
cin.tie(); cout.tie();
cin >> n;
for( int i=; i<n; i++ ) cin >> a[i];
int tmp = ;
for( int i=; i<n; i++ ){
if( a[i]>a[i-] ) tmp++;
else tmp = ;
ans = max(ans, tmp);
}
l[] = ;
for( int i=; i<n; i++ ){
if( a[i]>a[i-] ) l[i] = l[i-]+;
else l[i] = ;
}
r[n-] = ;
for( int i=n-; ~i; i-- ){
if( a[i]<a[i+] ) r[i] = r[i+]+;
else r[i] = ;
}
for( int i=; i<n-; i++ )
if( a[i-]<a[i+] ) ans = max(ans, l[i-]+r[i+]);
cout << ans << endl; return ;
}

D. Remove One Element

E.Nearest Opposite Parity

比赛时dfs写MLE,时间不够放弃。

预处理 + bfs通过,使用bfs理由->最短路

预处理出来答案为1的点,然后放进队列,同时将所有点i from 1~n可以跳到的位置i-a[i]和i+a[i]连边然后bfs

#include <bits/stdc++.h>
using namespace std; const int maxn = 2e5 + ;
const int inf = 0x3f3f3f3f;
int n, a[maxn], ans[maxn];
vector<int> p[maxn];
int main(){
memset( ans, -, sizeof(ans) );
scanf("%d", &n);
for( int i=; i<n; i++ ) scanf("%d", &a[i]);
queue<int> q;
for( int i=; i<n; i++ ){
if( i-a[i]>= ){
p[i-a[i]].push_back(i);
if( a[i-a[i]]% != a[i]% ) ans[i] = ;
}
if( i+a[i]<n ){
p[i+a[i]].push_back(i);
if( a[i+a[i]]% != a[i]% ) ans[i] = ;
}
if( ans[i]== ) q.push(i);
}
while( q.size() ){
int x = q.front();
q.pop();
for( auto i:p[x] ){
if( ans[i]==- && a[i]%==a[x]% ){
ans[i] = ans[x]+;
q.push(i);
}
}
}
for( int i=; i<n; i++ ){
printf("%d", ans[i]);
if( i==n- ) puts("");
else putchar(' ');
} return ;
}

E.Nearest Opposite Parity

Codeforces Round #605 (Div. 3)的更多相关文章

  1. Codeforces Round #605 (Div. 3) E - Nearest Opposite Parity

    题目链接:http://codeforces.com/contest/1272/problem/E 题意:给定n,给定n个数a[i],对每个数输出d[i]. 对于每个i,可以移动到i+a[i]和i-a ...

  2. 【cf比赛记录】Codeforces Round #605 (Div. 3)

    比赛传送门 Div3真的是暴力杯,比div2还暴力吧(这不是明摆的嘛),所以对我这种一根筋的挺麻烦的,比如A题就自己没转过头来浪费了很久,后来才醒悟过来了.然后这次竟然还上分了...... A题:爆搜 ...

  3. Codeforces Round #605 (Div. 3) E. Nearest Opposite Parity(最短路)

    链接: https://codeforces.com/contest/1272/problem/E 题意: You are given an array a consisting of n integ ...

  4. Codeforces Round #605 (Div. 3) D. Remove One Element(DP)

    链接: https://codeforces.com/contest/1272/problem/D 题意: You are given an array a consisting of n integ ...

  5. Codeforces Round #605 (Div. 3) C. Yet Another Broken Keyboard

    链接: https://codeforces.com/contest/1272/problem/C 题意: Recently, Norge found a string s=s1s2-sn consi ...

  6. Codeforces Round #605 (Div. 3) B. Snow Walking Robot(构造)

    链接: https://codeforces.com/contest/1272/problem/B 题意: Recently you have bought a snow walking robot ...

  7. Codeforces Round #605 (Div. 3) A. Three Friends(贪心)

    链接: https://codeforces.com/contest/1272/problem/A 题意: outputstandard output Three friends are going ...

  8. Codeforces Round #605 (Div. 3) 题解

    Three Friends Snow Walking Robot Yet Another Broken Keyboard Remove One Element Nearest Opposite Par ...

  9. Codeforces Round #605 (Div. 3) E - Nearest Opposite Parity (超级源点)

随机推荐

  1. 【LG1600】[NOIP2016]天天爱跑步

    [LG1600][NOIP2016]天天爱跑步 题面 洛谷 题解 考虑一条路径\(S\rightarrow T\)是如何给一个观测点\(x\)造成贡献的, 一种是从\(x\)的子树内出来,另外一种是从 ...

  2. bootstrap-table 列拖动

    1.页面js/css <!-- bootstrap 插件样式 --> <link th:href="@{/common/bootstrap-3.3.6/css/bootst ...

  3. it's over | 2019 CSP-S 第二轮认证(超长预警)

    也许应该从Day -1(2019年11月14日周四)开始说起? 卑微的我们在学长的怂恿下终于...停课了(哇我们太菜了,只停一天半的课有个卵用 早读后我带头去办公室请假,飞哥很大方地答应了,同时免了我 ...

  4. Codeforces 126B Password(Z算法)

    题意 给定一个字符串 \(s\) ,求一个子串 \(t\) 满足 \(t\) 是 \(s\) 的前缀.后缀且在除前缀后缀之外的地方出现过. \(1 \leq |s| \leq 10^6\) 思路 \( ...

  5. C++语言编程规范

    前言 这里参考了<高质量C++C 编程指南 林锐>.<google C++编程指南>以及<华为C++语言编程规范>编写了这份C++语言编程规范文档,以合理使用 C+ ...

  6. 使用 go modules 包管理工具(一)

    概述 我想实现一个开箱即用的 API 框架的轮子,这个轮子是基于 Gin 基础上开发的. 为什么是开箱即用,它会集成哪些功能? 以上功能点,都是常用的,后期可能还会增加. 废话不多说,咱们开始吧. 创 ...

  7. Hbase Filter之PrefixFilter

    PrefixFilter PrefixFilter是将rowkey前缀为指定字符串的数据全部过滤出来并返回给用户.例如: Scan scan = new Scan(); scan.setFilter( ...

  8. [转帖]mysql常用存储引擎(InnoDB、MyISAM、MEMORY、MERGE、ARCHIVE)介绍与如何选择

    mysql常用存储引擎(InnoDB.MyISAM.MEMORY.MERGE.ARCHIVE)介绍与如何选择原创web洋仔 发布于2018-06-28 15:58:34 阅读数 1063 收藏展开 h ...

  9. 《 .NET并发编程实战》实战习题集 - 1 - 隔离副作用

    先发表生成URL以印在书里面.等书籍正式出版销售后会公开内容.

  10. Java设计模式原型模式

    原型模式: – 通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式. – 就是java中的克隆技术,以某个对象为原型,复制出新的对象.显然,新的对象具备原型对象的特点 – 优势 ...