Codeforces Round #605 (Div. 3)
地址: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)的更多相关文章
- 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 ...
- 【cf比赛记录】Codeforces Round #605 (Div. 3)
比赛传送门 Div3真的是暴力杯,比div2还暴力吧(这不是明摆的嘛),所以对我这种一根筋的挺麻烦的,比如A题就自己没转过头来浪费了很久,后来才醒悟过来了.然后这次竟然还上分了...... A题:爆搜 ...
- 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 ...
- 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 ...
- 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 ...
- Codeforces Round #605 (Div. 3) B. Snow Walking Robot(构造)
链接: https://codeforces.com/contest/1272/problem/B 题意: Recently you have bought a snow walking robot ...
- Codeforces Round #605 (Div. 3) A. Three Friends(贪心)
链接: https://codeforces.com/contest/1272/problem/A 题意: outputstandard output Three friends are going ...
- Codeforces Round #605 (Div. 3) 题解
Three Friends Snow Walking Robot Yet Another Broken Keyboard Remove One Element Nearest Opposite Par ...
- Codeforces Round #605 (Div. 3) E - Nearest Opposite Parity (超级源点)
随机推荐
- [LeetCode] 827. Making A Large Island 建造一个巨大岛屿
In a 2D grid of 0s and 1s, we change at most one 0 to a 1. After, what is the size of the largest is ...
- [LeetCode] 375. Guess Number Higher or Lower II 猜数字大小之二
We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to gues ...
- java --后缀符号
public class Sample { public static void main(String[] args) { , num2 = ; num1--; System.out.println ...
- Docker学习2-Docker的基本命令与使用
前言: 前些天有人问镜像是什么?容器有是什么?docker对于初学者来说,往往分不清楚镜像和容器,编程语言都知道有一个面向对象,类和实例,类比作镜像,实例比作容器. 有的人蹦着学习的心态的去群里问人, ...
- SpringBoot 系列教程自动配置选择生效
191214-SpringBoot 系列教程自动配置选择生效 写了这么久的 Spring 系列博文,发现了一个问题,之前所有的文章都是围绕的让一个东西生效:那么有没有反其道而行之的呢? 我们知道可以通 ...
- Python - 批量下载 IIS 共享的文件
1.说明 用 IIS 以WEB形式发布了本地文件夹,提供文件下载,并设置了访问权限:默认下载需要点击一个一个的下载,web界面如下: 3.脚本 执行脚本批量下载文件,会在当前目录创建文件夹,并压缩该文 ...
- Intellij Idea 自动更新资源和类
Run -> Edit Configurations 进入配置页 On update action:当发现更新时的操作 选择Update classes and resources On ...
- wordcount实例
scala的wordcount实例 package com.wondersgroup.myscala import scala.actors.{Actor, Future} import scala. ...
- 【linux】查看某个进程PID对应的文件句柄数量,查看某个进程当前使用的文件句柄数量
================================ 1.linux所有句柄查询 lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more ...
- .NET设计模式-观察者模式
Observer(观察者模式) 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新. 说白了就是事件. using System; namespa ...