比赛地址

A

题意:给一个\(n*m\)的初始为白色的矩阵,一次操作可以将一行或一列染成
黑色,问至少染出\(k\)个黑点的最少操作次数。
\(n\),\(m\)<=100,\(k\)<=1e4

B

题意:有\(n\)条线段,用二元组\((x,len)\)表示,占据\([x-len,x+len]\)的位置。
问最多能选择多少条不相交的线段。
\(n\)<=1e5,\(x_i\),\(len_i\)<=1e9

C

题意:给定\(n\),\(k\),\(s\),构造一个序列\(a\),使得恰好有\(k\)个二元组\((l,r)\),\(\sum_{i=l}^{r} a[i]\) = \(s\)。
\(n\)<=1e5,0<=\(k\)<=\(n\),\(s\)<=1e9,\(a_i\)<=1e9

D

题意:有\(n\)张卡片,初始时每张卡片上面是\(a[i]\),下面是\(b[i]\)。一次操作可以交换相邻两张牌,
并将这两张牌翻转。最小化操作次数,使得上面的数组成的序列不降。
\(n\)<=18,\(a_i\),\(b_i\)<=50

E

题意:给定一个\(n\)点\(m\)边的无向图,每个点可以被染成黑色或白色,每条边可以指定一个[1,1e9]以内的权值。
找出一种染色和给定边权的方案,使得:
1.至少存在一个黑点,一个白点;
2.每个点到与其最近的颜色相异的点的距离为\(d_i\)。
\(n\)<=1e5,\(m\)<=2e5,\(d_i\)<=1e9

F

题意:有一个\(n*m\)的矩阵,初始时每个点都有一个颜色。
你可以对其进行任意次操作,每次操作可以任选一行(列),将这一行(列)的点全染成黑(白)色。
问共能操作出多少种不同的矩阵。答案对998244353取模。
\(n\),\(m\)<=10


题解

A

入门题。根据\(n\),\(m\)大小判断染行还是染列。
时间复杂度:\(O(1)\)

B

经典的贪心问题。将所有线段按右端点排序,直接扫一遍,维护一下当前选到的右端点就好。
时间复杂度:\(O(nlogn)\)

C

\(傻逼题\)。直接指定\(k\)点权值为\(s\),剩下的都为\(s+1\)就行。注意\(s\)=1e9需要特判。
时间复杂度:\(O(n)\)

D

\(n\)很小,引导我们可以用指数级别的复杂度做题。首先可以想到暴力枚举所有牌最后哪边朝上。
考虑如何判定一个方案是否合法,并判断其最小的移动步数。
我们将这个状态设为\(S\),它的第\(i\)位为1就代表它是\(b_i\)朝上,否则是\(a_i\)朝上。

step1

1的个数一定是个偶数。

step2

我们根据这个01序列,可以得到最终的一个无序序列\(C\)。将这个序列排序,现在要做的就是
找一个合法的匹配方案。
可能读者会有些疑惑:这里为什么还要判断是否合法呢?
考虑那个01序列的另外一层意义:如果某一位为1,那么这一位的这张牌就移动了奇数次,否则就是偶数次。
这个东西分奇偶讨论一下,用vector存一下所有\(c_i\)的所有出现位置,一一匹配就行。
由于\(C\)中可能有重复元素,最优策略就是原序列中左边的点尽量和排序后的\(C\)的左边的点匹配。这个是显然的。
这样,我们就相当于得到了一个排列\(P\),表示一种匹配方案。

step3

那么确定这个方案合法后,如何求出最少的移动步数呢?可以发现这就是这个排列的逆序对个数。把它算出来,更新答案。
时间复杂度:O(\(2^n\) \(\times\) \(n^2\))

E

考虑从何下手这个问题。
首先,我们肯定希望这个最短路尽量好求一些。最好是所有的匹配都是两点直接相连的。
当然事实确实是这样的。这里给出一个证明。
考虑反证法:如果存在一种匹配方案\(a->c\),\(b->c\),\(a\),\(b\)是黑点,\(c\)是白点,且这三点的连边情况是:\(a---b---c\)。
首先,如果\(b\)和\(c\)匹配,那么\(a\)不会和其他点匹配。

情况1

\(d_a\)<\(d_b\):显然这种方案是不合法的;

情况2

\(d_a\)>=\(d_b\):显然可以将\(b\)换成白点,\(c\)换成黑点(\(c\)不换也行,具体看情况)。
因此,若有解,一定存在一种匹配方案,使得所有点都和它直接相连的一个点匹配。
接下来,考虑这样的一个匹配过程:
一个节点\(A\)找到了另一个节点\(B\),与其匹配。那么那个节点\(B\)有两种选择:一是和\(A\)匹配,一是和其他节点匹配。
重点是,无论如何匹配,\(d_B\)一定大于等于\(d_A\)。
由此下去,一定有一个最终状态,节点\(B\)别无他选,只能和\(A\)匹配。我们发现了隐藏在题目中的单调性。
由此,我们得到了一个做法:先将所有节点按\(d_i\)从小到大排序,然后对于每个节点,
先找有没有与其直接相连的未被染色的点,且两者的\(d\)相同。若有,则两点互相匹配,若没有,再找一个已被染色的点,
与其匹配即可。若还没有,则无解。
注意一定要先找能互相匹配的点,因为一次可以染两个节点的色。
时间复杂度:\(O(nlogn+m)\)

F

待填坑~


代码

先咕在这里,等写完F再放吧~

atcoder Keyence Programming Contest 2020 题解的更多相关文章

  1. M-SOLUTIONS Programming Contest 2020 题解

    M-SOLUTIONS Programming Contest 2020 题解 目录 M-SOLUTIONS Programming Contest 2020 题解 A - Kyu in AtCode ...

  2. AtCoder AIsing Programming Contest 2020 D - Anything Goes to Zero (二进制,模拟)

    题意:给你一个长度为\(n\)的\(01\)串,从高位到低位遍历,对该位取反,用得到的十进制数\(mod\)所有位上\(1\)的个数,不断循环直到为\(0\),输出每次遍历时循环的次数. 题解:根据题 ...

  3. Atcoder Panasonic Programming Contest 2020

    前三题随便写,D题是一道dfs的水题,但当时没有找到规律,直接卡到结束 A - Kth Term /  Time Limit: 2 sec / Memory Limit: 1024 MB Score ...

  4. [AtCoder] NIKKEI Programming Contest 2019 (暂缺F)

    [AtCoder] NIKKEI Programming Contest 2019   本来看见这一场的排名的画风比较正常就来补一下题,但是完全没有发现后两题的AC人数远少于我补的上一份AtCoder ...

  5. [AtCoder] Yahoo Programming Contest 2019

    [AtCoder] Yahoo Programming Contest 2019   很遗憾错过了一场 AtCoder .听说这场是涨分场呢,于是特意来补一下题. A - Anti-Adjacency ...

  6. 【AtCoder】KEYENCE Programming Contest 2019

    A - Beginning 这个年份恐怕需要+2 #include <bits/stdc++.h> #define fi first #define se second #define p ...

  7. 【AtCoder】Dwango Programming Contest V题解

    A - Thumbnail 题意简述:给出N个数,找出N个数中和这N个数平均值绝对值最小的数 根据题意写代码即可= = #include <bits/stdc++.h> #define f ...

  8. Atcoder Yahoo Programming Contest 2019 简要题解

    A-C 直接放代码吧. A int n,k; int main() { n=read();k=read(); puts(k<=(n+1)/2?"YES":"NO&q ...

  9. HHKB Programming Contest 2020 D - Squares 题解(思维)

    题目链接 题目大意 给你一个边长为n的正方形和边长为a和b的正方形,要求把边长为a和b的正方形放在长度为n的正方形内,且没有覆盖(可以相邻)求有多少种放法(mod 1e9+7) 题目思路 这个思路不是 ...

随机推荐

  1. 在4K屏下以超过VMWare默认的最高分辨率运行Linux系统

    前言 4K 屏,有其优点也有其弊端.优点就是分辨率高,字体和图标看起来如丝一般顺滑:缺点就是字体和图标小,费眼睛.解决这个缺点的方法也很简单粗暴,就是将系统的显示比例放大.在高分屏不很普及的时候,无论 ...

  2. 使用stringstream打破字符与其他类型之间的隔阂

    考虑这样一个问题:给您一行各位数字,计算它们的和.数字之间用空格隔开.只能使用字符串. 一般考虑使用getchar,但这对于不熟悉 ASCLL 码的同学十分困难.C++的sstream头文件中提供了十 ...

  3. win10 + cuda10 +cudnn + GLUON 环境搭建

    1. <动手学深度学习> 由于新型非典型肺炎扩散,上班日期挪到2.10 日了,在家比较无聊决定了解一下深度学习. 在github 上找到一个资源,可以动手学深度学习,便打算按照这本书的内容 ...

  4. 设置允许外网访问MySQL

    1:设置mysql的配置文件     /etc/mysql/my.cnf      找到 bind-address  =127.0.0.1  将其注释掉://作用是使得不再只允许本地访问:  重启my ...

  5. nCompass-网络流量基础知识

    nCompass-网络流量基础知识 1.  流量分析基础知识 1.1  常见的流量分析方式: SNMP: 网管平台通过主动式获取设备接口流量信息. Flow:网络设备将穿越的数据流信息精简压缩打包. ...

  6. bootstrap的自适应 和细节点

    bootstrap的自适应尽量少用绝对宽度px来定义大小,这会导致缩小屏幕宽度时相冲突,多使用百分比来改变位置.. 遇到不能用margin和padding来改变位置时,首先应该想到绝对定位和相对定位( ...

  7. Python学习小记(1)---import小记

    在这种目录结构下,import fibo会实际导入fibo文件夹这个module λ tree /F 卷 Programs 的文件夹 PATH 列表 卷序列号为 BC56-3256 D:. │ fib ...

  8. [译]Android Studio 3.6 新特性概览

    设计 设计编辑器 设计编辑器(比如布局编辑器和导航编辑器)现在提供了一个拆分视图模式,能够同时查看 UI 界面的 Design 视图和 Code 视图.拆分视图取代并改进了早期的预览窗口,并且可以对每 ...

  9. linux中vim使用技巧

    一.导入文件内容 :r 解释 导入文件 示例 编辑模式下 # 将/tmp/test.txt内容导入到光标所在的位置的下一行 :r /tmp/test.txt :! 解释 在编辑文件时,执行系统命令 示 ...

  10. for遍历用例数据时,报错:TypeError: list indices must be integers, not dict,'int' object is not iterable解决方法

    一:报错:TypeError: list indices must be integers, not dict for i in range(0,len(test_data)): suite.addT ...