AtCoder Grand Contest 006

<br >

心血来潮,开了一套AGC.....

然后发现各种不会做.........感觉智商被AGC摁在地上摩擦......

<br >

代码戳这里

<br >

A - Prefix and Suffix

这道题目还是送温暖的...

直接枚举长度从\(n\)到\(n+n\)

最后的\(n\)为用第二个字符串填充,剩余空缺从前到后一次用第一个字符串填充

最后验证前\(n\)位是否满足第一个字符串即可

由于是从小到大枚举,枚举到可行直接输出答案即可


B - Median Pyramid Easy

这道题目就比较有意思了

首先考虑不可行的情况,显然当\(x=1\)或\(2*n-1\)的时候是不可行的

因为每一次取的都是三个格子中的中位数,显然到第二行的时候,\(1\)或\(2*n-1\)就消失不见了,更高的行中不可能出现

然后考虑其余情况的构造方法

一种比较通用的构造方法是,最高行为\(x\),我们使得下一行出现至少两个\(x\)即可,如下图所示

我们只要保证图中所有的红色格子都是\(x\)的话,最后一行一定是\(x\)

那么,现在,我们只需要构造最后一行的四个格子,使得从第二行开始就在指定位置出现连续的两个\(x\)了

这样就比较思博了,\((x-1),(x),(x+1),(x-2)\)即可

但是我们发现,当\(x=2\)的时候,会有点问题,那么我们对\(x=2\)特判一下,构造\((x+1),(x),(x-1),(x+2)\)

当然,构造的方法不唯一

最后注意特判\(n=2\)的情况,不过我这样构造的话,不会出现问题


C - Rabbit Exercise

这道期望题目一颗赛艇啊

首先考虑对称位置的处理,显然\(x_i\)关于\(x_{i-1}\)和\(x_{i+1}\)的对称位置分别是\(2*x_{i-1}-x_{i}\)和\(2*x_{i+1}-x_{i}\)

考虑兔子\(i\)的期望

\[E(x_i')=\frac{1}{2}E(2x_{i-1}-x_i)+\frac{1}{2}E(2x_{i+1}-x_i)\]

\[=E(x_{i-1})+E(x_{i+1})-E(x_i)\]

这样,我们似乎已经得到了\(O(MK)\)的算法

我们从几何角度来考虑一下这个操作

其实就是\(y_i\)相对于\(y_{i-1}\)和\(y_{i-2}\)的相对位置发生了变化,\(y_i\)在外面的情况也是如此

再一般的来说,就是\(E(x_i)-E(x_{x-1})\)和\(E(x_i)-E(x_{x+1})\)的值进行了交换

那么,我们考虑差分,这样,每一次的操作就是对两个数进行交换了

而交换操作是分组进行的,我们可以根据类似快速幂的方式,在\(O(logk)\)的时间内完成交换

那么总的复杂度就是\(O(nlogk)\)


D - Median Pyramid Hard

这道题目似乎是B题的SPJ啊.....

考虑二分答案,假设当前需要验证的答案为\(x\),表示答案\(≥x\)是否成立

那么,根据最下面一行和\(≥x\)的关系,我们可以得到底层的\(0/1\)数列,\(1\)表示\(≥x\)

我们现在得到了底层的\(0/1\)数列,而题目所给的条件,上一层的一格为\(1\),当且仅当下一层与之对应的三个中至少有两个\(1\)

现在,符合情况的话,那么就是顶层为\(1\)

我们可以画画图来分析一下底层的情况,如何向上传导

我们可以发现,当出现连续的两个\(1\)的时候,他们所对应的的上面,全部为\(1\)

那么,这样的情况如何向外拓展呢?

我们发现,当连续的两个\(1\)旁边出现隔着一个位置的\(1\)的是否,这个全是\(1\)的竖行,可以向着隔着一个位置的\(1\)的方向拓展一列

那么我们只需要正着反着,各扫一遍

这样一来,我们就可以在\(O(2n)\)的时间内验证答案了

还有一种比较特殊的情况是,底层不需要出现连续的两个\(1\)

特判一下

总的时间复杂度是\(O(3n*logn)\)


E - Rotate 3x3

这道题目很繁琐啊QAQ......

画了满满一页草稿纸......

首先,我们透过现象看本质,3*3Rotate 实际上就是把左右两列交换,然后在把三列全部倒置

那么,其实可以发现,每一列中的三个数是不会改变的,而且三个数要么正向,要么逆向

再其次,因为交换的是间隔的两列,所以矩阵中的奇数列和偶数列其实是相对独立的

我们把操作分成两个来思考

对间隔的两列旋转(这个旋转操作自带一个倒置和一个左右交换)、对某一列倒置

对于第一个问题的数量,我们可以转为这个问题:给出\(n\)个数的一个全排列,每次可以交换相邻的两个数,求每个数被交换的次数

贪心的做,我们先把在最后的数换下去,然后在换倒数第二个.......

暴力的做是\(O(n^2)\),考虑用树状数组维护一波,\(O(nlogn)\)

第二个问题,只要判断第一个问题的奇偶性,就可以直接得到答案了

那么回到原问题,可行性怎么判断

首先判断前面提到的一些条件...balabala

然后,就是对后面两个子问题的判断了

对于奇数列的第一个问题,左右交换的前提是其中间的偶数列进行倒置

那么,也就是说,奇数列的第一个问题的奇偶性应当与偶数列的第二个问题相同;偶数列的判断亦是如此

这样一来,问题就解决了,时间复杂度\(O(nlogn)\),不过题解里给出的复杂度是\(O(n)\),不是很明白他是怎么实现的,可能他的\(d\)数组可以线性求吧Orz


F - Blackout

又一次深刻体会到了出题人的强大Orz...

首先,我们可以把这个矩阵问题转变为图论问题

我们把格子\((x,y)\)转变为一条有向边\(x\rightarrow y\),那么,当\(x\rightarrow y\)和\(y\rightarrow z\)存在时,有边\(z\rightarrow x\)

我们可以先来尝试探索一些规律

对于图中的\(n\)个点,每个点\(x\)都有边连向\(x+1\),我们尝试更新一波边,发现只有在\(x\)和\(y\)满足\(x+1\equiv y (mod\; 3)\)的时候,\(x\)有指向\(y\)的边

以此,我们发现这张图和\(3\)有关系(出题人是这么说的.......)

于是,我们用三色来对图进行染色,使得相邻的节点不同色

接下来,我们分别讨论三种情况

【1】 染色成功,且图中出现了不同的三种颜色\(x\)、\(y\)、\(z\)

那么,我们对于三种不同颜色的边,可以把所有\(x\rightarrow y\)、\(y\rightarrow z\)、\(z\rightarrow x\)都连上

证明:如下图,如果上述情况成立的话,那么,一定至少存在\(x\rightarrow y\)、\(y\rightarrow z\),我们当然可以把\(z\rightarrow x\)连上,当有新的边\(u\rightarrow x\)时,我们发现,\(y\rightarrow u\)也同样可以连上,那么,联通的所有点都是可以两先关的

【2】染色成功,图中出现的颜色不足三种

那么显然,不存在\(x\rightarrow y\)、\(y\rightarrow z\)这样的边对,那么,答案就是边数

【3】染色失败

那么,画画图很容易看出,一定存在着环(且环的大小一定不是\(3\)的倍数)

那么,很显然得,所有联通的点之间,两两之间的所有边均可以连上

这样一来,我们对于每一个联通块一次这样讨论即可,时间复杂度\(O(m)\)


新成就get,打穿了一道AGC

AGC006的更多相关文章

  1. AGC006 C Rabbit Exercise——思路(置换)

    题目:https://agc006.contest.atcoder.jp/tasks/agc006_c 选了 i 位置后 x[ i ] = x[ i-1 ] + x[ i+1 ] - x[ i ] . ...

  2. 【AtCoder】AGC006

    AGC006 A - Prefix and Suffix -- #include <bits/stdc++.h> #define fi first #define se second #d ...

  3. 【AtCoder】【模型转化】【二分答案】Median Pyramid Hard(AGC006)

    题意: 给你一个排列,有2*n-1个元素,现在进行以下的操作: 每一次将a[i]替换成为a[i-1],a[i],a[i+1]三个数的中位数,并且所有的操作是同时进行的,也就是说这一次用于计算的a[], ...

  4. AtCoder Grand Contest 006 (AGC006) C - Rabbit Exercise 概率期望

    原文链接https://www.cnblogs.com/zhouzhendong/p/AGC006C.html 题目传送门 - AGC006C 题意 有 $n$ 个兔子,从 $1$ 到 $n$ 编号, ...

  5. [AGC006] D - Median Pyramid Hard 二分

    Description ​ 现在有一个NN层的方块金字塔,从最顶层到最底层分别标号为1...N1...N. ​ 第ii层恰好有2i−12i−1个方块,且每一层的中心都是对齐的. 这是一个N=4N=4的 ...

  6. 【AGC006 C】Rabbit Exercise

    题意 有 \(n\) 只兔子在数轴上,第 \(i\) 只兔子的初始坐标为整数 \(x_i\). 现在这些兔子会按照下面的规则做体操.每一轮体操都由 \(m\) 次跳跃组成:在第 \(j\) 次跳跃时, ...

  7. AtCoder Grand Contest 1~10 做题小记

    原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-1-to-10.html 考虑到博客内容较多,编辑不方便的情 ...

  8. [AT2164] [agc006_c] Rabbit Exercise

    题目链接 AtCoder:https://agc006.contest.atcoder.jp/tasks/agc006_c 洛谷:https://www.luogu.org/problemnew/sh ...

  9. AGC600 C Rabbit Exercise —— 置换

    题目:https://agc006.contest.atcoder.jp/tasks/agc006_c 考虑 \( i \) 号兔子移动后位置的期望,是 \( x_{i+1} + x_{i-1} - ...

随机推荐

  1. sql执行过长,如何入手优化

    一条sql执行过长的时间,你如何优化,从哪些方面 1.查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化)2.涉及链表的查询,是否能进 ...

  2. jmeter接口测试 ——学习笔记

    JMETER常用操作 1.jmeter做http脚本 Http请求页面内容介绍 添加cookie 线程组-添加-配置元件--HTTP Cookie管理器 添加权限验证 不能使用普通用户修改学生金币,接 ...

  3. Linux实现内容分发的主备模式的智能DNS

    BIND实现智能DNS的原理是通过view的方式,首先判断客户请求的来源,然后返回不同的IP 规划:为za.com域进行智能解析 分2个网段,192.168.1.0/24网段的请求解析到192.168 ...

  4. [python学习篇][廖雪峰][4]函数--reduce

    reduce的用法.reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是: reduce(f, ...

  5. google浏览器audits

    功能翻译 audits,审计 Audits help you identify and fix common problems that affect your site'sperformance,a ...

  6. rsync配置和同步数据

    rsync的搭建配置1.环境和配置文件 rsyncd.conf(主配置文件) rsyncd.secrets(密码文件) pc1:192.168.0.1,rsync的服务器,配置rsyncd.conf文 ...

  7. 【转】hibernate延迟加载和抓取策略

    一.延迟加载 1.简单查询get,load 针对对象本身延迟或即时 当使用load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,即:当我们使用session.load ...

  8. 【bzoj3252】攻略 贪心+DFS序+线段树

    题目描述 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景(scene),某 ...

  9. 用Javascript实现图片的缓慢缩放效果

    <body> <!--页面布局:一张图片两个按钮--> <div style = "width:400px;margin:0 auto"> &l ...

  10. 刷题总结——ball(ssoj)

    题目: 题目背景 SOURCE:NOIP2015-SHY-9 题目描述 Alice 与 Bob 在玩游戏.他们一共玩了 t 轮游戏.游戏中,他们分别获得了 n 个和 m 个小球.每个球上有一个分数.每 ...