计蒜客模拟赛5 D2T2 蚂蚁搬家】的更多相关文章

很久很久以前,有很多蚂蚁部落共同生活在一片祥和的村庄里.但在某一天,村庄里突然出现了一只食蚁兽,蚂蚁们为了保全性命而决定搬家. 然而这个村庄四面环山,想要离开这个村庄必须要从地洞里离开,村子里一共有 2n2n2n 个地洞,分布在山的左右,一边 nnn 个.左边的任意一个地洞都可以通到右边 nnn 个地洞中的任意的一个,如图所示(两侧地洞从上至下编号为 111 到 nnn). 对于右边的第 iii 个出口,附近有数量为 wiw_iw​i​​ 的食物. 现在前后依次来了 qqq 个蚂蚁部落,第 ii…
又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. “计算机坏了,可计算机系还得办.小 K,你去了解一下大家的成绩,顺便数数今年两校计算机系有多少人吧!” 于是,小 K 来到了人群中,开始调查大家的成绩. 然而,同学们只有七秒钟的记忆,已经忘记了自己的具体成绩(这可真是尴尬啊). 但是,因为在忘记成绩之前和校友互相调侃过,他们清楚地记得 在自己的学校…
题目链接:https://nanti.jisuanke.com/t/16443 题意: 给你一个由1~n构成的正整数序列,有m组询问,每组询问要求输出[l , r]区间内的逆序对个数. 数据范围: 对于100%的数据,满足1 <= n,m <= 30000,l < r,∑ | l[i] - l[i-1] | + ∑ | r[i] - r[i-1] | <= 7 * 10^6. 题解: 如果知道区间[l , r]中的逆序对个数,那么也可以快速求出区间[l-1 , r],[l+1 ,…
题目链接:https://nanti.jisuanke.com/t/16444 题意: 蒜头君是一个乐于助人的好孩子,这天他所在的乡村发生了洪水,有多名村民被困于孤岛上,于是蒜头君决定去背他们离开困境,假设蒜头君所在的村子是n*m的网格,网格中.号代表平地,#号代表该地已被洪水淹没,A.B--等大写字母表示该地有村民被困,s代表蒜头君的起点,t代表蒜头君的终点. 蒜头君的初始速度为 k秒一格,他每次可以向上下左右4个方向中的一个移动1格.在背上一个村民后,他的速度可能会降低,也可能会加快,但他的…
题目链接:https://nanti.jisuanke.com/t/16447 题意: 蒜头君有一只坐骑,人马. 一天,蒜头君骑着他的坐骑走上了一片n*m的大荒野,一开始时,蒜头君在(1,1)点,他要前往(n,m)点,蒜头君的人马每次可以向右或向下移动一格.然而这片荒野并不平静,除了起点和终点外每个点都有一只怪物会袭击蒜头君. 然而蒜头君的人马强大无比,它会先对怪物造成等同于它攻击力的伤害,然后蒜头君才会受到怪物的攻击,伤害等同于怪物的攻击力.然后人马再攻击怪物,怪物再攻击蒜头君,直至怪物死去,…
题目链接:https://nanti.jisuanke.com/t/16442 题意: 有个人在第一年送了你一对1岁的兔子.这种兔子刚生下来的时候算0岁,当它在2~10岁的时候,每年都会生下一对兔子,并且它在10岁那年生完兔子后就会挂掉.现在让你算出第t年兔子的总数(不算那一年10岁的兔子). 题解: 我们用一个1*10的矩阵代表某一年的兔子数量,第k列上的数字n代表今年有n只k岁的兔子. 那么初始矩阵是这样的: 接下来考虑怎样构造特殊矩阵. 有两个转移关系: 第二年0岁的兔子数 = 第二年2~…
题目链接:https://nanti.jisuanke.com/t/16446 题意: 给你一棵有n个节点的树以及每条边的长度,输出树上节点之间的最短距离和.然后进行m次操作,每次操作更改一条边的长度,分别输出每次操作后树上节点之间的最短距离和. 题解: 最短距离和 = ∑(树上每一条边被最短路经过的次数 * 这条边的长度) 一个节点到它父节点的边被经过的次数 = 该节点以及它的子孙的节点个数 * 除了该节点和它子孙之外的所有节点总个数 每一个节点以及它子孙节点的个数总和用一遍dfs保存在num…
题目链接:https://nanti.jisuanke.com/t/16445 题意: 给你一个n*n大小的01矩阵,和一个k*k大小的锤子,锤子只能斜着砸,问只砸一次最多能砸到多少个1. 题解: 将原矩阵顺时针旋转45°,二维前缀和预处理,然后枚举每一个可能砸到的正方形之和并取最大. 注:枚举的正方形的四个顶点必须是从原矩阵旋转过来的点,否则会出现砸到下面的这种情况: (*代表不是原矩阵旋转过来的点,阴影代表砸到的部分) 代码中用vis数组判断是否为原矩阵中旋转过来的点. AC Code: #…
虽然是裸的换根dp,但是为了在联赛前锻炼码力,强行上了点分树+线段树. 写完+调完总共花了不到 $50$ 分钟,感觉还行. code: #include <bits/stdc++.h> #define N 420004 #define LL long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; namespace IO { char *p1,*p2,buf[10…
开始时因为吃饭晚了一刻钟,然后打开比赛.看了眼榜单A题已经过了二十来个队伍了,宝儿就去做A. 传师说最后一题看题目像最短路,于是我就去看M了,宝儿做完之后也来陪我看.M一开始看到时以为是像   POJ的Frogger   一样,求S 到T 的路径中的最小距离最大值.后来发现对路径中走过的边数也有限制.于是又去想,然后想到把原本记录到此点最短距离的Dis[] 变成 记录到达此点所需要飞行器最低等级的Dis_Level[],这样剩下的就是普通的Dijkstra了.做完M之后比赛进行了大概一个半小时.…