洛谷P3335 [ZJOI2013]蚂蚁寻路】的更多相关文章

题目描述 在一个 n*m 的棋盘上,每个格子有一个权值,初始时,在某个格子的顶点处一只面朝北的蚂蚁,我们只知道它的行走路线是如何转弯,却不知道每次转弯前走了多长. 蚂蚁转弯是有一定特点的,即它的转弯序列一定是如下的形式:右转,右转,左转,左转,右转,右转…左转,左转,右转,右转,右转.即两次右转和两次左转交替出现的形式,最后两次右转(最后两次一定是右转)后再多加一次右转.我们还知道,蚂蚁不会在同一个位置连续旋转两次,并且蚂蚁行走的路径除了起点以外,不会到达同一个点多次,它最后一定是回到起点然后结…
题目链接 bzoj3111: [Zjoi2013]蚂蚁寻路 题解 发现走出来的图是一向上的凸起锯齿状 对于每个突出的矩形dp一下就好了 代码 /* */ #include<cstdio> #include<algorithm> const int maxn = 127; inline int read() { int x = 0,f = 1; char c = getchar(); while(c < '0' || c > '9'){if(c == '-')f = -1…
题目描述 Description在一个 n*m 的棋盘上,每个格子有一个权值,初始时,在某个格子的顶点处一只面朝北的蚂蚁,我们只知道它的行走路线是如何转弯,却不知道每次转弯前走了多长.蚂蚁转弯是有一定特点的,即它的转弯序列一定是如下的形式:右转,右转,左转,左转,右转,右转…左转,左转,右转,右转,右转.即两次右转和两次左转交替出现的形式,最后两次右转(最后两次一定是右转)后再多加一次右转.我们还知道,蚂蚁不会在同一个位置连续旋转两次,并且蚂蚁行走的路径除了起点以外,不会到达同一个点多次,它最后…
题目背景 小A在你的帮助下,开始“刷题”,他在小书童里发现了一款叫“蚂蚁大战”(又称蛋糕保卫战)的游戏.(你懂得) 题目描述 游戏中会出现n只蚂蚁,分别有a1,a2……an的血量,它们要吃你的蛋糕.当然,你不会袖手旁观.你有m元钱,可以用来造防御塔,每个塔k元.塔的威力是每秒w滴血.此外,在第r秒时,蚂蚁会把蛋糕搬进窝.小A想知道,在第r秒时,会有多少块蛋糕被搬进窝(一只蚂蚁搬一块蛋糕). 输入输出格式 输入格式: 第一行:n m k w r.第2~n+1行:a1,a2……an. 输出格式: 一…
P3332 [ZJOI2013]K大数查询 题目描述 有\(N\)个位置,\(M\)个操作.操作有两种,每次操作如果是\(\tt{1\ a\ b\ c}\)的形式表示在第\(a\)个位置到第\(b\)个位置,每个位置加入一个数\(c\)如果是\(\tt{2\ a\ b\ c}\)形式,表示询问从第\(a\)个位置到第\(b\)个位置,第\(C\)大的数是多少. 输入输出格式 输入格式: 第一行\(N\),\(M\)接下来\(M\)行,每行形如\(\tt{1\ a\ b\ c}\)或\(\tt{2…
P1916 小书童——蚂蚁大战 题目背景 小A在你的帮助下,开始“刷题”,他在小书童里发现了一款叫“蚂蚁大战”(又称蛋糕保卫战)的游戏.(你懂得) 题目描述 游戏中会出现n只蚂蚁,分别有a1,a2……an的血量,它们要吃你的蛋糕.当然,你不会袖手旁观.你有m元钱,可以用来造防御塔,每个塔k元.塔的威力是每秒w滴血.此外,在第r秒时,蚂蚁会把蛋糕搬进窝.小A想知道,在第r秒时,会有多少块蛋糕被搬进窝(一只蚂蚁搬一块蛋糕). 输入输出格式 输入格式: 第一行:n m k w r.第2~n+1行:a1…
蚂蚁 [题目描述] 在一根无限长的木棍上,用n只蚂蚁,每只蚂蚁有一个初始位置和初始朝向,蚂蚁们以每秒一个单位的速度向前移动,当两只蚂蚁相遇时,它们会掉头(掉头时间忽略不计).现给出每只蚂蚁的初始位置和初始朝向,请你计算出它们在t秒后的位置和朝向. 思路: 1.对于每只蚂蚁,它的坐标在所有蚂蚁中的次序无论怎样移动都不会改变.(因为当两只蚂蚁相遇时,它们会掉头) 2.对于两只蚂蚁同时掉头,可以看作“两只蚂蚁交换编号”,继续向前移动,所以O(logn)的时间(排序)就可以算出最终在一个确定的位置有一个…
P1916 小书童——蚂蚁大战 题目背景 小A在你的帮助下,开始“刷题”,他在小书童里发现了一款叫“蚂蚁大战”(又称蛋糕保卫战)的游戏.(你懂得) 题目描述 游戏中会出现n只蚂蚁,分别有a1,a2……an的血量,它们要吃你的蛋糕.当然,你不会袖手旁观.你有m元钱,可以用来造防御塔,每个塔k元.塔的威力是每秒w滴血.此外,在第r秒时,蚂蚁会把蛋糕搬进窝.小A想知道,在第r秒时,会有多少块蛋糕被搬进窝(一只蚂蚁搬一块蛋糕). 输入输出格式 输入格式: 第一行:n m k w r.第2~n+1行:a1…
Sol DP. 首先观察转折,画画图,看看移动路线,可以非常轻易的发现如果走到起点的下方是回不去的.. 然后它就相当于一个底部是平的,顶部凹凹凸凸的形状,每右转两次或左转两次就会形成小矩阵,这样就可以来DP了. 首先一个非常简单的思路,就是f[k][i][j]表示取到第j列高度为h最大权值,枚举上一个转折点,复杂度 \(O(n^5k)\) 因为上一个点一定是与他同一行的,枚举行,枚举次数,枚举列,枚举高度,枚举上一个位置的列,枚举上一个位置的行. 我们可以优化,让他一次DP一行,其实可以发现就是…
题目大意:有$n$个位置,$m$个操作.操作有两种: $1\;l\;r\;x:$在区间$[l,r]$每个位置加上一个数$x$ $2\;l\;r\;k:$询问$[l,r]$中第$k$大的数是多少. 题解:树套树,权值线段树套位置线段树,要标记永久化,不然会$TLE$ 卡点:没有标记永久化,$TLE$,然后处理$tag$部分写错 C++ Code: #include <cstdio> #include <algorithm> #include <cctype> namesp…