#627 DIV3 题解
A.
每组给一个和个数(),每次操作可以给一个加2,求是否能使n个数相等
4
3
1 1 3
4
1 1 2 1
2
11 11
1
100
YES
NO
YES
YES
直接扫一遍,记录最大值与当前的差是否能被2整除。
#include<bits/stdc++.h>
using namespace std;
int a[120];
int main() {
//freopen("in.txt","r",stdin);
int t, n; cin >> t;
while (t--) {
cin >> n;
int Max = -1;
for (int i = 0; i < n; ++i)cin >> a[i], Max = max(Max, a[i]);
bool f = false;
for (int i = 0; i < n; ++i) {
int d = Max - a[i];
if (d % 2 == 1) {
f = true; break;
}
}
if (f)cout << "NO" << endl;
else cout << "YES" << endl;
}
}
B.
样例,每组给一个和个数(,中是否存在一个长度至少为3的子序列为回文串。
5
3
1 2 1
5
1 2 2 3 2
3
1 1 2
4
1 2 2 1
10
1 1 2 2 3 3 4 4 5 5
YES
YES
NO
YES
NO
在找到两个数相等之后,由于是子序列可以不连续,在两个数之间随便找一个数即可
#include<bits/stdc++.h>
using namespace std;
int n, t, a[5050];
int main() {
//freopen("in.txt", "r", stdin);
cin >> t; while (t--) {
cin >> n; for (int i = 1; i <= n; ++i)cin >> a[i];
bool flag = false;
//双指针思想
for (int i = 1; i < n; i++) {
for (int j = i + 1; j <= n; j++) {
if (a[i] == a[j]) {
if (j - i > 1) flag = 1;
}
}
if (flag == 1) break;
}
if (flag)cout << "YES" << endl;
else cout << "NO" << endl;
}
}
C.
题意:
给出一个字符串, 只包含两个字符‘L’,‘R’,如果为L,只能向左走,如果为R,只能向右走,问一只青蛙从最左端开始走,走到最右端一次最少跳多远。这只青蛙可以跳的距离为 [ 1,最短长度 ] 这个区间。
举例:LRLRRLL,最短跳的距离为 3
首先从 0 位置跳到 第一个 'R', 然后从第一个‘R’跳到第二个或者第三个 'R',最终跳到末尾。
在这个样例中,最短跳的距离为 3, 意味着这个青蛙可以向右跳1步,或者2步,或者3步。
解题思路:
可以将字符串两端加入R,判断两个R的最远距离即可,但注意 最短距离下限为 1 而不是 0。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
string s;
int main() {
int t; cin >> t;
while (t--) {
cin >> s; int len = s.length();
s[len] = 'R';
int ans = 1, j = len;
for (int i = len - 1; i >= 0; --i) {
if (s[i] == 'R')
ans = max(ans, j - i), j = i;
}
if (s[0] != 'R')
ans = max(ans, j + 1);
cout << ans << endl;
}
cin >> s;
}
D.
给一个和个数,求满足+的二元组,一共有多少对。()
5
4 8 2 6 2
4 5 4 1 3
7
要满足+的条件,直接排序,然后差值遍历过程从upper_bound找到第一个大于的数即可。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
int n; long long a[maxn], b[maxn], d[maxn], tmp[maxn];
int main() {
cin >> n;
for (int i = 1; i <= n; ++i)cin >> a[i];
for (int i = 1; i <= n; ++i)cin >> b[i], d[i] = a[i] - b[i];
sort(d + 1, d + 1 + n);
long long ans = 0;
//ai + aj > bi + bj <=> Di > -Dj (ai - bi > -(aj - bj))
for (int i = 1; i <= n; ++i) {
int index = upper_bound(d + 1 + i, d + 1 + n, -d[i]) - d;
ans += n - index + 1;//index表示为第一个大于的位置,总数要n - index + 1
}
cout << ans;
}
E.
一天有个n小时,Vova要睡到一定时间
7 24 21 23
16 17 14 20 20 11 22
3
考虑表示前次睡眠刚好用了次减1操作。记录一个关于的前缀和,舒适睡眠的条件是
同时要考虑当前的这个,是在用了一次减一操作还是没有用。
若用了一次减一操作之后的情况:
若在第次没有用的话:
当然如果,不满足,直接从转移到即可,不需要+1。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2000 + 5;
int a[maxn], dp[maxn][maxn], sum[maxn];
int main(){
int n, h, l, r;
scanf("%d %d %d %d", &n, &h, &l, &r);
for(int i = 1;i <= n;i++) {
scanf("%d", a + i);
sum[i] = sum[i - 1] + a[i];
}
for(int i = 1;i <= n;i++) {
for(int j = 0;j <= i;j++) {
if(sum[i] - j < 0) continue;
if((sum[i] - j) % h <= r && (sum[i] - j) % h >= l) {
if(j != 0) {
dp[i][j] = max(dp[i][j], max(dp[i-1][j], dp[i-1][j-1]) + 1);
} else {
dp[i][j] = max(dp[i][j], dp[i-1][j] + 1);
}
} else {
if(j != 0) {
dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]);
} else {
dp[i][j] = dp[i-1][j];
}
}
}
}
int ans = 0;
for(int i = 0;i <= n;i++) {
ans = max(ans, dp[n][i]);
}
printf("%d\n", ans);
return 0;
}
F.(未做出,网摘解法)
给一颗有个点的树和一个01数组,表示号节点是黑色还是白色,0为黑,1为白,问对于每个,包含点的联通块中的最大值是多少。
9
0 1 1 1 0 0 0 0 1
1 2
1 3
3 4
3 5
2 6
4 7
6 8
5 9
2 2 2 2 2 1 1 0 2
对于一个树上节点来说,为了扩大的值,只能沿着子节点或者父节点往外扩展,用两个来考虑各自的贡献。
首先考虑子树中的贡献,是的子节点,显然只要,所以
之后考虑来自父亲方向的贡献,是的父节点,若,那么往这个方向扩展只会让变小,所以不予考虑。若,我们需要判断节点取最大值的时候,有没有把节点包含进来,若则肯定包含进来了,当把包含进来时,和在统一联通块,之前假设是>,所以
若时,没有和在同一联通块,而为了使变大,在的时候有
在写法上,显然最小的值只能是-1,因为一个黑点在不能扩展的时候没有必要再加一个黑点进来。所以小于0的情况只要-1。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5+5;
int a[maxn], dp[maxn];
vector<int> G[maxn];
void dfs1(int u, int fa) {
for(int i = 0;i < G[u].size();i++) {
int v = G[u][i];
if(v == fa) continue;
dfs1(v, u);
if(dp[v] >= 0) dp[u] += dp[v];
}
}
void dfs2(int u, int fa) {
for(int i = 0;i < G[u].size();i++) {
int v = G[u][i];
if(v == fa) continue;
if(dp[u] - dp[v] > 0) {
if(dp[v] != -1) dp[v] = dp[u];
else {
dp[v] += dp[u];
}
}
dfs2(v, u);
}
}
int main(){
int n = 0;
scanf("%d", &n);
for(int i = 1;i <= n;i++) {
scanf("%d", a + i);
if(a[i] == 0) {
dp[i] = -1;
} else {
dp[i] = 1;
}
}
for(int i = 1;i < n;i++) {
int u, v;
scanf("%d %d", &u, &v);
G[u].push_back(v); G[v].push_back(u);
}
dfs1(1, 0); dfs2(1, 0);
for(int i = 1;i <= n;i++) {
printf("%d%c", dp[i], i == n ? '\n' : ' ');
}
return 0;
}
#627 DIV3 题解的更多相关文章
- Codeforces Round #481 (Div. 3)
我实在是因为无聊至极来写Div3题解 感觉我主要的作用也就是翻译一下题目 第一次线上打CF的比赛,手速很重要. 这次由于所有题目都是1A,所以罚时还可以. 下面开始讲题 A.Remove Duplic ...
- CF1256(div3 java题解)
A: 题意:给定A个N元,B个一元,问是否可以凑成S元. 思路:A*i+j=S 即 A*I<=S<=A*I+B 即min(S/N,A)+B>=S: /* @author nimphy ...
- Codeforces #550 (Div3) - G.Two Merged Sequences(dp / 贪心)
Problem Codeforces #550 (Div3) - G.Two Merged Sequences Time Limit: 2000 mSec Problem Description T ...
- CodeForces 1029E div3
题目链接 第一道场上自己做出来的E题...虽然是div3,而且是原题... 当时做完ABC,D题没有思路就去怼E了,然后发现貌似原题? 事实上就是原题... 给个原题链接... [HNOI2003]消 ...
- Codeforces Round #535 (Div. 3) [codeforces div3 难度测评]
hhhh感觉我真的太久没有接触过OI了 大约是前天听到JK他们约着一起刷codeforces,假期里觉得有些颓废的我忽然也心血来潮来看看题目 今天看codeforces才知道居然有div3了,感觉应该 ...
- 题解报告:hdu 1028 Ignatius and the Princess III(母函数or计数DP)
Problem Description "Well, it seems the first problem is too easy. I will let you know how fool ...
- CodeForces Round#480 div3 第2场
这次div3比上次多一道, 也加了半小时, 说区分不出1600以上的水平.(我也不清楚). A. Remove Duplicates 题意:给你一个数组,删除这个数组中相同的元素, 并且保留右边的元素 ...
- 【CF598 Div3 F】Equalizing Two Strings
一道通篇结论的傻逼题,被 lh 随手秒了 别告诉我你不会 Div3 的题,你肯定在 fake 没看过题解,以下做法纯属口胡,应该没问题 Description https://www.luogu.or ...
- CF #575 Div3
// 比赛链接:https://codeforces.com/contest/1196 // CF 2019.7.24 // 本想Div3手速场上分,结果卡在C题,掉了不少分. // 自闭了这么久,今 ...
- codeforces 1426F,初学者也能做,div3的最难题
大家好,欢迎阅读codeforces专题. 今天选择的题目是Div3比赛的最后一题,也是最难的一道题.选这道题的主要原因是帮助大家建立信心,因为有些小伙伴给我反应说之前选择的题目有些难了,觉得自己可能 ...
随机推荐
- 浏览器跨 Tab 窗口通信原理及应用实践
最近,相信大家一定被这么个动效给刷屏了: 以至于,基于这个效果的二次创作层出不穷,眼花缭乱. 基于跨窗口通信的弹弹球: 基于跨窗口通信的 Flippy Bird: 我也尝试制作了一个跨 Tab 窗口的 ...
- Docker-Compose部署Gitlab以及Gitlab配置SMTP邮件服务
使用Docker-Compose部署Gitlab 拉取镜像 地址: https://hub.docker.com/r/gitlab/gitlab-ce/tags 拉取到镜像后,使用docker tag ...
- C语言源码的陷波器设计及调试总结
一 前记 音频信号处理中,限波器是一个常用的算法.这个算法难度不是很高,可用起来却坑很多. 二 源码解析 1 滤波器的核心函数,这里注意两点,一个是带宽不能太宽了,太宽了杀伤力太大了,容易出问题.另外 ...
- 我用 AI 写的《JavaScript 工程师的 Python 指南》电子书发布啦!
关于本书 你好,我是 luckrnx09,一名靠 React 恰饭的前端工程师,很高兴向你介绍我的第一本开源电子书<JavaScript 工程师的 Python 指南>. 本书的内容完全免 ...
- Winform 控件库 MaterialSkin.2 使用教程(鸿蒙字体版)
️MaterialSkin.2 控件库在之前的文章中已经介绍过了,就不啰嗦了 - > Winform 好看控件库推荐:MaterialSkin.2 ️官方库里使用的是 Google 的 Robo ...
- Hudi 在 vivo 湖仓一体的落地实践
作者:vivo 互联网大数据团队 - Xu Yu 在增效降本的大背景下,vivo大数据基础团队引入Hudi组件为公司业务部门湖仓加速的场景进行赋能.主要应用在流批同源.实时链路优化及宽表拼接等业务场景 ...
- MySQL运维16-双主双从读写分离
一.双主双从架构介绍 在MySQL多主多从的架构配置中和双主双从是一样的,学会了双主双从的架构部署,多主多从的配置也同样就回了.下面以双主双从作为示例演示.其中一个主机maste1用于处理所有写请求, ...
- mac如何访问同一wifi下的项目-mac-ru-he-fang-wen-tong-yi-wifi-xia-de-xiang-mu
title: mac如何访问同一wifi下的项目 date: 2022-03-28 20:14:06.341 updated: 2022-03-28 21:55:42.53 url: https:// ...
- 【独立闯天下】Prim新传奇!💥原团队的Blazor版本迟迟无音,合并请求石沉大海。于是,我们决定单干!加入Prime Blazor版项目,一起开创崭新的旅程吧!🌟📚
共建Prime的Blazor版:为开源社区注入新活力 Prime组件库作为一款广受欢迎的开源组件库,一直以来都备受开发者们的青睐.然而,随着技术的不断发展和更新,原团队的Blazor版本似乎已经逐渐失 ...
- Programming Abstractions in C阅读笔记:p242-p245
<Programming Abstractions in C>学习第67天,p242-p245总结,总计4页. 一.技术总结 6.2小结主要讲回溯算法及递归算法在迷宫求解中应用,当然,理解 ...