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,一经查实,立即删除!

相关文章

随感 -- 2013/08/16

请保持每天学习的习惯。。。 转载于:https://www.cnblogs.com/xj626852095/p/3648219.html

Html(快捷键!+Tab)

HMTL(HyperText Mark-up Language)即超文本*标记*语言或超文本标签语言 超文本 可以实现页面内可以包含图片,链接,甚至音乐,程序等. 网页文件扩展名:.html或者 .htm 超文本标记语言包括"头"部分(英文:head),和"主体"部分(英文:body),其中"头"…

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;第三题写了好长时间无果。还…

[转]关于WM_NCHITTEST消息

http://www.cnblogs.com/GnagWang/archive/2010/09/12/1824394.html 我为了移动一个无标题栏的窗体&#xff0c;使用了WM_NCHITTEST消息&#xff0c;这个消息大概如下&#xff1a; 通常&#xff0c;我们拖动对话框窗口的标题栏来移动窗口&#xff0c;但有时候&#xff0c;我们想…

LeetCode228场周赛解题报告

LeetCode228场周赛解题报告 生成交替二进制字符串的最少操作数 原题链接 https://leetcode-cn.com/contest/weekly-contest-228/problems/minimum-changes-to-make-alternating-binary-string/ 解题思路 直接进行暴力的将二进制字符串枚举&#xff0c;首个字符是0&#xf…

表现形式CSS

CSS&#xff08;Cascading StyleSheets的缩写&#xff09;&#xff0c;翻译为“层叠样式表”或者“级联样式表”&#xff0c;简称样式表 Cascading StyleSheets 的首字母缩写&#xff0c;意思是层叠样式表。有了CSS&#xff0c;html中大部分表现样式的标签就废弃不用了&#x…

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…

CSS_属性入门

width设置元素(标签)的宽度&#xff0c;如&#xff1a;width:100px; height设置元素(标签)的高度&#xff0c;如&#xff1a;height:200px; background设置元素背景色或者背景图片&#xff0c;如&#xff1a;background:gold; 设置元素背景色为金色 画图演示 边框内边距,外边…

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

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

CSS—常用选择器

选择器是指通过一定的语法规则选取到对应的HTML标记&#xff0c;然后给这个对应的HTML标记设置样式 1.标签选择器 写法:标签名{属性:值;属性:值} 标签选择器影响范围大&#xff0c;一般用来做一些通用设置&#xff0c;或用在层级选择器中。 举例&#xff1a; div{color:red}…

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;如果一个…

CSS属性提升

CSS样式 属性提高 text-align设置文字水平对齐方式&#xff0c;如text-align:center 设置文字水平居中 text-indent设置文字首行缩进&#xff0c;如&#xff1a;text-indent:24px; 设置文字首行缩进24px font-style设置字体是否倾斜&#xff0c;如&#xff1a;font-style:no…

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

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

属性和索引器的使用

索引器允许您按照处理数组的方式索引类、结构或接口。参数相当于中介。 http://msdn.microsoft.com/zh-cn/library/2549tw02(vvs.80).aspx 转载于:https://www.cnblogs.com/iammackong/p/3268187.html

列表与表单

有序标签orderlist - 基本用法 - -<ol> - <li>列表内容</li> - <li>列表内容</li> - ..... - </ol> - 快速构建表格的快捷键 ol>(li>a)*4 无序标签 unorderlist -->经常使用 -<ul> …

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…