Codeforces Round #700 (Div. 2)A~D2解题报告

Codeforces Round #700 (Div. 2)A~D2解题报告

A Yet Another String Game

原题链接

http://codeforces.com/contest/1480/problem/A
在这里插入图片描述

在这里插入图片描述

解题思路

  • Alice想让更小,先手
  • Bob想让其更大,后手
  • 解决方案当然是贪心,从第一个排到最后一个
  • 如果不是选择当前未更改的第一个,那么被别人修改,那么就会往反方向走了

AC代码

#include <bits/stdc++.h>
using namespace std;const int N = 110;
char s[N];int main()
{int t;  cin >> t;while (t -- ){scanf("%s", s);for (int i = 0; s[i]; i ++ ){if (i & 1)  // bigger{if (s[i] != 'z')putchar('z');elseputchar('y');}else        // smaller{if (s[i] != 'a')putchar('a');elseputchar('b');}}puts("");}return 0;
}

B The Great Hero

原题链接

http://codeforces.com/contest/1480/problem/B
在这里插入图片描述
在这里插入图片描述

解题思路

就是一个英雄和一群小怪兽打,机制和洛克王国一样,问自己安排小怪兽出厂顺序,是否可以打死所有小怪兽(包括同归于尽)。
我们一直英雄的伤害为AAA,血量为BBB,nnn个小怪兽的伤害为aia_iai,血量为bib_ibi,可以计算出他可以承受的伤害为ci=⌈bi/A⌉c_i=\lceil b_i/A\rceilci=bi/A
英雄可以打过的充要条件是:
A>c1∗a1+...+ci∗ai+...+((cn−1)∗an)A > c_1*a_1 +...+c_i * a_i +... +((c_n - 1)* a_n)A>c1a1+...+ciai+...+((cn1)an) 注意这里是大于,因为保证最后一下可以打出去就行
⟹\Longrightarrow
A+an>c1∗a1+...+ci∗ai+...+(cn∗an)A + a_n > c_1*a_1 +...+c_i * a_i +... +(c_n * a_n)A+an>c1a1+...+ciai+...+(cnan)
右边是常数,左面越大越好,也就是攻击力最大的放在最后即可
O(N)O(N)O(N)

AC代码

#include <bits/stdc++.h>
using namespace std;typedef long long LL;
const int N = 100010;
int n;
LL A, B;
class Node
{
public:int a, b;
}q[N];int main()
{int t;  cin >> t;while (t -- ){scanf("%lld%lld", &A, &B);scanf("%d", &n);int tmp;int max_a = 0;for (int i = 1; i <= n; i ++ ){scanf("%d", &q[i].a);max_a = max(max_a, q[i].a);}LL sum = 0;for (int i = 1; i <= n; i ++ ){scanf("%d", &tmp);q[i].b = tmp / A + (tmp % A != 0);  // 可以几回合sum = sum + LL(q[i].a) * q[i].b;}if (B + max_a > sum)puts("YES");elseputs("NO");}return 0;
}

C Searching Local Minimum

原题链接

http://codeforces.com/contest/1480/problem/C
在这里插入图片描述
在这里插入图片描述

解题思路

二分题目
这个题目二分特性很难一眼看出,平时的二分基本是左侧为满足(不满足),右侧是不满足(满足),然后进行二分,有意思的地方就是在于满足的是什么特性!!
本题这个特性和平时遇到的特性不同, 特性是:区间[l,r]中至少含有一个local_min,至少含有一个是精髓! 因为对于本体而言局部最小值可能有很多,而且还很分散,我们需要找任意一个局部最小值,直接按照这个性质来找就可以二分。
需要注意的一点是,被我们舍弃的另一部分不是说不含有local_min,而是在我们未询问的前提下可能不含有local_min,而选中的那个区间一定含有。

AC代码

#include <bits/stdc++.h>
using namespace std;typedef long long LL;
const int N = 100010, INF = 0x3f3f3f3f;
int a[N];void query(int idx)
{if (a[idx] != -1)       // 之前已经是有数字了return;printf("? %d\n", idx);cout.flush();scanf("%d", &a[idx]);
}
int n;int main()
{cin >> n;memset(a, -1, sizeof a);a[0] = INF, a[n + 1] = INF;int l = 1, r = n, mid;while (l < r){mid = (l + r) / 2;query(mid);query(mid + 1);if (a[mid] < a[mid + 1]){r = mid;}else{l = mid + 1;}}printf("! %d\n", l);return 0;
}

D1 Painting the Array I

原题链接

http://codeforces.com/contest/1480/problem/D1
样例

解题思路

题目大概描述为,将原本的数组a1,a2,...,ana_1, a_2, ..., a_na1,a2,...,an通过染色分成两个子数组a1(0),a2(0),...,an1(0)a_1^{(0)}, a_2^{(0)}, ..., a_{n1}^{(0)}a1(0),a2(0),...,an1(0)a1(1),a2(1),...,an1(1)a_1^{(1)}, a_2^{(1)}, ..., a_{n1}^{(1)}a1(1),a2(1),...,an1(1)使得合并数组毗邻相同的元素后,两个数组的长度和尽可能的大。
下面我们对原数组变形,形成以下形式
a0,⋅⋅⋅,a0⏟n0,a1,⋅⋅⋅,a1⏟n1,⋅⋅⋅ai,⋅⋅⋅,ai⏟ni,⋅⋅⋅,aed,⋅⋅⋅,aed⏟ned\underbrace{a_0, \cdot\cdot\cdot, a_0}_{n_0},\underbrace{a_1, \cdot\cdot\cdot, a_1}_{n_1},\cdot\cdot\cdot\underbrace{a_i, \cdot\cdot\cdot, a_i}_{n_i},\cdot\cdot\cdot,\underbrace{a_{ed}, \cdot\cdot\cdot, a_{ed}}_{n_{ed}}n0a0,,a0,n1a1,,a1,niai,,ai,,nedaed,,aed\quad其中∀i,ai≠ai+1\forall i, a_i \not= a_{i+1}i,ai=ai+1
假设我们当前正要处理ai,⋅⋅⋅,ai⏟ni,\underbrace{a_i, \cdot\cdot\cdot, a_i}_{n_i},niai,,ai,部分时,分配的两个数组当前为b1,b2,⋅⋅⋅,bcur1b_1,b_2,\cdot\cdot\cdot,b_{cur1}\quadb1,b2,,bcur1c1,c2,⋅⋅⋅,ccur2\quad c_1,c_2,\cdot\cdot\cdot,c_{cur2}c1,c2,,ccur2
下面我们对当前处理的情况进行讨论,

  • ni=1n_i=1ni=1
    bcur1和ccur2至少存在一个不等于aib_{cur1}和c_{cur2}至少存在一个不等于a_{i}bcur1ccur2ai,那么直接放在不等于的后面,res+=1res += 1res+=1
  • ni≥2n_i\geq 2ni2
    bcur1和ccur2存在一个等于ai,另一个不等于ai\quad b_{cur1}和c_{cur2}存在一个等于a_{i},另一个不等于a_{i}bcur1ccur2aiai,那么直接放在不等于的后面(两边都放也行),res+=1\quad \quad res += 1res+=1
    bcur1和ccur2都不等于ai\quad b_{cur1}和c_{cur2}都不等于a_{i}bcur1ccur2ai,那么两边都放至少一个,res+=2\quad res += 2res+=2
    那么为什么这样做是对的?

补证明:

AC代码

#include <bits/stdc++.h>
using namespace std;const int N = 100010;
const int INF = 0x3f3f3f3f;
int a[N];
int n;
int main()
{cin >> n;for (int i = 1; i <= n; i ++ )scanf("%d", &a[i]);int pre = 1, ed = 0, cnt;a[0] = a[n + 1] = a[n + 2] = a[n + 3] = INF;int res = 0;int surp1 = -INF, surp2 = -INF;int tmp1;for (int i = 1; i <= n + 1; i ++ ){if (a[i] == a[i - 1]){ed = i;}else{cnt = ed - pre + 1;if (cnt == 0){pre = ed = i;continue;}if (surp1 == a[i - 1] || surp2 == a[i - 1]){surp1 = surp2 = a[i - 1];res += 1;}else if (cnt >= 2){res += 2;surp1 = surp2 = a[i - 1];}else if (cnt == 1)  // 帮忙遮掩{tmp1 = a[i];if (surp1 == a[i])surp1 = a[i - 1];else if (surp2 == a[i])surp2 = a[i - 1];elsesurp1 = a[i - 1];res += 1;}pre = ed = i;}}cout << res << endl;return 0;}

D2 Painting the Array II

原题链接 待补

http://codeforces.com/contest/1480/problem/D2
在这里插入图片描述

解题思路

该题目也是贪心,
首先,原数组a0,⋅⋅⋅,a0⏟n0,a1,⋅⋅⋅,a1⏟n1,⋅⋅⋅ai,⋅⋅⋅,ai⏟ni,⋅⋅⋅,aed,⋅⋅⋅,aed⏟ned\underbrace{a_0, \cdot\cdot\cdot, a_0}_{n_0},\underbrace{a_1, \cdot\cdot\cdot, a_1}_{n_1},\cdot\cdot\cdot\underbrace{a_i, \cdot\cdot\cdot, a_i}_{n_i},\cdot\cdot\cdot,\underbrace{a_{ed}, \cdot\cdot\cdot, a_{ed}}_{n_{ed}}n0a0,,a0,n1a1,,a1,niai,,ai,,nedaed,,aed\quad其中∀i,ai≠ai+1\forall i, a_i \not= a_{i+1}i,ai=ai+1。因为是要求最小,我们将数组改造为a0,a1,⋅⋅⋅,ai,⋅⋅⋅,aeda_0, a_1, \cdot \cdot \cdot,a_i, \cdot \cdot \cdot,a_{ed}a0,a1,,ai,,aed
假设我们当前构造的两行line1,line2line1, line2line1,line2是正确的,现在查看a[i]a[i]a[i]应该放在哪个队列之后。

  • line1_back()=line2_back()line1\_back() =line2\_back()line1_back()=line2_back(),那么我们将a[i]a[i]a[i]放在那里都是可以的。
  • line1_back()≠line2_back()line1\_back() \not=line2\_back()line1_back()=line2_back()时候,进行下列分析
    倘若line1_back()=a[i]line1\_back() = a[i]line1_back()=a[i],那么直接放在line1line1line1即可,因为可以直接抵消掉
    同理,倘若line2_back()=a[i]line2\_back() = a[i]line2_back()=a[i],那么直接放在line2line2line2即可。
    最后 一种情况,line1_back()≠a[i]而且line2_back()≠a[i]line1\_back() \not= a[i] 而且 line2\_back() \not= a[i]line1_back()=a[i]line2_back()=a[i],那么我们考虑line1line1line1line2line2line2的末尾谁可以最近的匹配,放入较远的一方即可。(因为最近匹配优先,不可被中断)。

AC代码

#include <bits/stdc++.h>
using namespace std;const int N = 100010, INF = 0x3f3f3f3f;
int a[N], b[N];
int n;
vector<int> pos[N];
int cur[N];int nxt(int x)
{if (x == INF || cur[x] == pos[x].size())    // 已经到达了最后一个return INF;elsereturn pos[x][cur[x]];
}int main()
{cin >> n;for (int i = 1; i <= n; i ++ )  scanf("%d", &a[i]);int n2 = 1;b[1] = a[1];for (int i = 2; i <= n; i ++ )if (a[i] != a[i - 1])b[++ n2] = a[i];n = n2;memset(cur, 0, sizeof cur);for (int i = 1; i <= n; i ++ ){// printf("%d ", b[i]);pos[b[i]].push_back(i);}// puts("");int res = n;vector<int> v[2];int tar = INF, cur_tar, tar_line = 1;v[0].push_back(INF), v[1].push_back(INF);for (int i = 1; i <= n; i ++ ){cur[b[i]] ++;if (v[0].back() == v[1].back()) // 情况一,line1 == line2{if (v[0].back() == b[i])res --;v[0].push_back(b[i]);}else if (v[0].back() == b[i]){res --;v[0].push_back(b[i]);}else if (v[1].back() == b[i]){res --;v[1].push_back(b[i]);}else{static int nxt0, nxt1;nxt0 = nxt(v[0].back());nxt1 = nxt(v[1].back());if (nxt0 >= nxt1){v[0].push_back(b[i]);}else{v[1].push_back(b[i]);}}}cout << res << endl;return 0;
}
/*
15
1 1 1 2 2 1 3 2 1 1 1 2 3 3 1
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 2020 力扣杯全国秋季编程大赛(656/3244,前20.2%)

文章目录1. 比赛结果2. 题目1. LeetCode LCP 17. 速算机器人 easy2. LeetCode LCP 18. 早餐组合 easy3. LeetCode LCP 19. 秋叶收藏集 medium4. LeetCode LCP 20. 快速公交 hard5. LeetCode LCP 21. 追逐游戏 hard1. 比赛结果 做出来2题&#xff0c;第三题写了好长时间无果。还…

LeetCode 第 206 场周赛(733/4491,前16.3%)

文章目录1. 比赛结果2. 题目1. LeetCode 5511. 二进制矩阵中的特殊位置 easy2. LeetCode 5512. 统计不开心的朋友 medium3. LeetCode 5513. 连接所有点的最小费用 medium4. LeetCode 5514. 检查字符串是否可以通过排序子字符串得到另一个字符串 hard1. 比赛结果 做出来3题。继…

lightoj 1026 无向图 求桥

题目链接&#xff1a;http://lightoj.com/volume_showproblem.php?problem1026 #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<queue> #include<vector> using namespace …

python基础知识点小结(2021/2/9)

python基础知识点小结(2021/2/9)持续更新中~~ 入门小知识 cmd 在cmd上进行python&#xff0c;直接输入 python\quad pythonpython退出cmd输入 exit()\quad exit()exit()到指定文件夹上运行python文件 python路径文件名.py\quad python 路径文件名.pypython路径文件名.py pyt…

03.结构化机器学习项目 W1.机器学习策略(1)

文章目录1. 机器学习策略2. 正交化 Orthogonalization3. 单一数字评估指标4. 满足和优化指标5. 训练/开发/测试集划分6. 开发集和测试集的大小7. 什么时候该改变开发/测试集和指标8. 人类的表现水准9. 可避免偏差10. 理解人的表现11. 超过人的表现12. 改善你的模型的表现测试题…

Educational Codeforces Round 104 (Rated for Div. 2)A~E解题报告

Educational Codeforces Round 104 (Rated for Div. 2) A. Arena \quad原题链接 http://codeforces.com/contest/1487/problem/A \quad解题思路 首先&#xff0c;我们看战斗次数是无限的&#xff0c;任意非最小值的英雄都有赢得次数&#xff0c;既然有场次可以赢&#xff0…

LeetCode 1130. 叶值的最小代价生成树(区间DP/单调栈贪心)

文章目录1. 题目2. 解题2.1 DP2.2 单调栈贪心1. 题目 给你一个正整数数组 arr&#xff0c;考虑所有满足以下条件的二叉树&#xff1a; 每个节点都有 0 个或是 2 个子节点。数组 arr 中的值与树的中序遍历中每个叶节点的值一一对应。&#xff08;知识回顾&#xff1a;如果一个…

03.结构化机器学习项目 W2.机器学习策略(2)

文章目录1. 进行误差分析2. 清除标注错误的数据3. 快速搭建你的第一个系统&#xff0c;并进行迭代4. 使用来自不同分布的数据&#xff0c;进行训练和测试5. 数据分布不匹配时&#xff0c;偏差与方差的分析6. 定位数据不匹配问题7. 迁移学习 Transfer learning8. 多任务学习 Mul…

Codeforces Round #702 (Div. 3)解题报告

Codeforces Round #702 (Div. 3) 全部题解 读错题意&#xff0c;写了半天真是心态爆炸&#xff0c;总的来看这次题目不难的。 A. Dense Array http://codeforces.com/contest/1490/problem/A 解题思路 相邻的数字必然是倘若不满足的话是需要插入数据的&#xff0c;那么我们…

LeetCode 930. 和相同的二元子数组(哈希+前缀和)

文章目录1. 题目2. 解题1. 题目 在由若干 0 和 1 组成的数组 A 中&#xff0c;有多少个和为 S 的非空子数组。 示例&#xff1a; 输入&#xff1a;A [1,0,1,0,1], S 2 输出&#xff1a;4 解释&#xff1a; 如下面黑体所示&#xff0c;有 4 个满足题目要求的子数组&#xff…

poj 3469(网络流模版)

题目链接&#xff1a;http://poj.org/problem?id3469 思路&#xff1a;终于把网络流的模版测试好了&#xff0c;在Dinic和Sap之间还是选择了Sap,事实证明Sap确实比Dinic效率高&#xff0c;在此贴出自己的网络流模版&#xff1a; 1 #include<iostream>2 #include<cstd…

盒子的真实宽高

盒子的宽 两边border 两边padding 盒子的高度 上下border 上下padding

04.卷积神经网络 W1.卷积神经网络

文章目录1. 计算机视觉2. 边缘检测示例3. 更多边缘检测4. Padding5. 卷积步长6. 三维卷积7. 单层卷积网络8. 简单卷积网络示例9. 池化层10. 卷积神经网络示例11. 为什么使用卷积&#xff1f;作业参考&#xff1a; 吴恩达视频课 深度学习笔记 1. 计算机视觉 举例&#xff1a;图…

JAVA基础学习预科部分 (Markdown + dox)2021/2/22持续更新中

javaSE从 2021/02/22开始&#xff0c;预计到2021/02/28&#xff0c;原本预计的算法题解先鸽一下。 -博客Blog的重要性 & Markdown语法 基础markdown语法 标题&#xff0c; 直接使用 ‘#’&#xff0c;一级二级…五级字体&#xff0c;斜体(左右个一个∗*∗)&#xff0c;加…

LeetCode 1031. 两个非重叠子数组的最大和(一次遍历,要复习)*

文章目录1. 题目2. 解题2.1 暴力枚举2.2 一次遍历1. 题目 给出非负整数数组 A &#xff0c;返回两个非重叠&#xff08;连续&#xff09;子数组中元素的最大和&#xff0c;子数组的长度分别为 L 和 M。&#xff08;这里需要澄清的是&#xff0c;长为 L 的子数组可以出现在长为…

Java入门篇 2021/02/22

Java入门篇 2021/02/22 Java的三大版本 java三大版本主要包括 JavaSE, JavaME, JavaEE&#xff0c;其中现如今的JavaME已经是很少见了&#xff0c;JavaSE是JavaEE的基础。 JDK、JER、JVM三个关系 JDK, JRE, JVM具体的关系可以参照下图&#xff0c;是名副其实的包含关系。 J…

LeetCode 911. 在线选举(二分查找)

文章目录1. 题目2. 解题1. 题目 在选举中&#xff0c;第 i 张票是在时间为 times[i] 时投给 persons[i] 的。 现在&#xff0c;我们想要实现下面的查询函数&#xff1a; TopVotedCandidate.q(int t) 将返回在 t 时刻主导选举的候选人的编号。 在 t 时刻投出的选票也将被计入…

java 流程控制篇 2021/02/26持续更新中

1. 用户交互Scanner 1.1 简单的Scanner用法 首先&#xff0c;需要 import java.util.Scanner其次&#xff0c;需要创建一个 Scanner 类的对象&#xff0c; Scanner s new Scanner(System.in);通过调用Scanner对象的方法来完成&#xff0c; 一定要注意有开有关&#xff0c;最…

04.卷积神经网络 W1.卷积神经网络(作业:手动/TensorFlow 实现卷积神经网络)

文章目录作业1&#xff1a;实现卷积神经网络1. 导入一些包2. 模型框架3. 卷积神经网络3.1 Zero-Padding3.2 单步卷积3.3 卷积神经网络 - 前向传播4. 池化层5. 卷积神经网络 - 反向传播5.1 卷积层反向传播5.1.1 计算 dA5.1.2 计算 dW5.1.3 计算 db5.2 池化层 - 反向传播5.2.1 最…

html的实战性介绍

Html 简介 超文本结构语言 html并非一种编程语言&#xff0c; 而是一种描述超文本文档的标记语言&#xff0c;用html编写的超文本文档成为html文档。 超文本文档指的是&#xff0c;可以加入图片、声音、动画、影视等内容&#xff0c;并可以利用超链接方便的从一个文件跳转到网…