acm
Han Gang
这个作者很懒,什么都没留下…
展开
-
ZJOI2007-棋盘制作(悬线法)
题目链接:https://ac.nowcoder.com/acm/problem/20471题意:给你一个矩形,0,1,表示不同颜色。让你从中找出最大的正方形和矩形的区域满足相邻的格子颜色不相同。思路:悬线法。悬线法是很常用的来解决最大子矩形问题的动态规划算法。首先,讲一下思想:我们先可以找到每个格子mp(i,j)mp(i,j)mp(i,j)可以满足要求的最左边L(i,j)L(i,j)L(i,j)和最右边R(i,j)R(i,j)R(i,j)位置。一个矩形是由四边构成的,现在我们已经找到了三边,还有上原创 2020-12-02 14:52:10 · 150 阅读 · 0 评论 -
Bomb(数位DP板题)
题目链接:BombProblem DescriptionThe counter-terrorists found a time bomb in the dust. But this time the terrorists improve on the time bomb. The number sequence of the time bomb counts from 1 to N. If the current number sequence includes the sub-sequence “49原创 2020-09-29 20:52:23 · 431 阅读 · 0 评论 -
2020CCPC网络赛1002——Graph Theory Class
记录一下min_25求取前n项的所有素数和LL tmp=Min25::solve(n+1);下面是1002AC代码/* * @沉着,冷静!: 噗,这你都信! * @LastEditors: HANGNAG * @LastEditTime: 2020-09-22 19:38:19 * @FilePath: \ACM_vscode\杭电多校\hdu.cpp */#include <bits/stdc++.h>using namespace std;const int N =原创 2020-09-22 20:18:02 · 328 阅读 · 3 评论 -
完全背包的for循环互换问题
今天做题的时候发现了一个问题,废话不多说,先上题目链接:F. Shovels Shop先说一下题意:商店有卖n个铁锹,你要取买k把回去(多一把,少一把都不行),然后有m原创 2020-08-19 23:35:30 · 469 阅读 · 1 评论 -
2020HDU多校第八场——Isomorphic Strings
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6863题意:有一个长度为n的字符串,问能不能分解成k个子段,每个子段长度相同,而且字符串的最小表示相同。其中k要大于1;判断输出Yes,No;思路:要想成功分解成k段,那么最少每段的字符数量要相同,而且还要被n整除,那么我们可以找到所有字符和n的公约数len,然后n/len就是最小的k,k每次可以增长一倍,但是要判断能不能被n整除(n可以整除k,但是n不一定就能整除2*k,这里开始忘了判断,疯狂的T,原创 2020-08-14 18:03:52 · 231 阅读 · 0 评论 -
HDU多校第八场——Fluctuation Limit
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6860题意:给你n个区间,还有一个k,问你能不能在每个区间内都选择一个数,并且这n个数相邻之间差值不能超过k。思路:先判断最后能不能得到可行的区间,不行直接输出NO,然后计算每个每个数的取值范围,最后从最后一个可行的区间取一个值,回溯计算到第一个,输出。(告诫自己一句,做题切勿急躁,容易手忙脚乱,脑子混乱,恶行循环,再水的题也能做成举世难题)AC:/* * @沉着,冷静!: 噗,这你都信! * @L原创 2020-08-14 10:33:52 · 186 阅读 · 0 评论 -
Codeforces Round #662 (Div. 2) D.Rarity and New Dress
题目链接:https://codeforces.com/contest/1393/problem/D题意:给你一个n*m的由字母组成的矩阵,,问你这个矩阵中有多少个“相同字母组成的菱形”,菱形规则看图更好理解比赛的时候一直想着以中心点dp,因为中心点的菱形数量等于它上下左右菱形最大值加1(前提是它上下左右和它本身字符相同)。但是这个状态好像没办法转移,没有办法维护四周的dp值,所以比赛最后还是以失败告终。。。。早上看到一个大佬的解法,恍然大悟,因为这个图形的特点,我们可以以最下的那个点来进行dp,原创 2020-08-08 10:50:22 · 390 阅读 · 0 评论 -
2020牛客多校第六场——H-Harmony Pairs(数位dp)
链接:https://ac.nowcoder.com/acm/contest/5671/H题意:定义了一个运算S(),S(A)表示A这个数的所有位数上的数之和。然后给了一个很大的数(n<=10100),让我们找,A<B,并且S(A)>S(B)S(A)>S(B)S(A)>S(B)的个数。思路:这题用数位dp还是很明显的。我们定义dp[105][2000][2][2]:分别表示当前第几位,S(A)−S(B)S(A)-S(B)S(A)−S(B),B当前是否为上限,A当前是原创 2020-08-03 10:18:26 · 247 阅读 · 3 评论 -
Codeforces Round #659 (Div. 2)
比赛链接:https://codeforces.com/contest/1384A.Common Prefixes题意:给你n个数表示数组a,让你输出n+1个字符串,使第i+1个字符串和第i个字符串有a[i]位前缀相同。AC#include<bits/stdc++.h>#include <algorithm>#include <iostream>#include <map>#include <math.h>#include &l原创 2020-07-25 22:53:07 · 388 阅读 · 0 评论 -
2020HDU多校第一场-Leading Robots(贪心,单调栈)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6759题意T组输入然后给您n个机器人的初始位置p和加速度a,问你有多少个机器人会出现领先于其他所有机器人的情况(注意是领先于其他所有)也就是说并行的两个是不可能出现领先的情况的。思路首先,我们先按加速度从小到大排序,再按初始位置从小到大排序。然后我们想,这样排序之后,那么后面的的机器人是一定会超过前面的机器人的,(因为,路无线长,加速度大的最终一定会超过加速度小的,如果加速度相同,那么后面的p大,那么在原创 2020-07-23 21:14:53 · 334 阅读 · 0 评论 -
Codeforces Round #658 (Div. 2)
比赛链接:https://codeforces.com/contest/1382A.Common Subsequence题意给你两组数,问你有没有相同 的书,有的话,输出最短的那组(大家都知道,1是最小的)AC#include<bits/stdc++.h>using namespace std;#define LL long longconst LL N=50005;int a[1005],b[1005];int main(){ int t; scanf("原创 2020-07-22 16:02:12 · 1597 阅读 · 0 评论 -
CF294B Shaass and Bookshelf
链接:https://www.luogu.com.cn/problem/CF294B题意:给你n本书,让你做一个书架,每一本书都有一个厚度ti和一个宽度wi,所有书的高度固定,每本书可以竖着放和横着放,前提是横着放的书的总宽度不能超过竖着放的书的总厚度。问你要放下这些书的书架的最小长度是多少。上个图理解一下,就这样放。思路:一道01背包dp[j]表示把厚度总和为j的书放在了上面(也就是横放)其余厚度为sum-j的书放在下面(也就是竖放)的最小横着的长度。状态转移就很明显了,最后的结果就是原创 2020-07-17 11:50:22 · 348 阅读 · 2 评论 -
背包相关
1.01背包最基本的背包问题,思想就是每个物品放与不放,每次有两种选择,dp递推得到背包容量为m的可获得到的价值最大。因为是每层递推下来得到,所以DP可以优化为一维,只不过要第二个for要V–>Ci,因为每个商品只能取一次,不存在同一行叠加情况,若是正序,则就表示每个商品可以取无限次。2.完全背包和01背包原理相同,只不过这里的每个物品可以取无限次数。要注意和01背包的区别。3.多重背包就是每个物品可以取有限k次数(不一定是1次),我们可以他们都转化为01背包,但是很多题都会卡时间原创 2020-07-16 15:50:01 · 153 阅读 · 0 评论 -
HDU 1025最长递增子序列(二分法)
最长递增子序列(二分)HDU1025https://www.felix021.com/blog/read.php?1587找最长递增子序列,以前一般用DP的方法找,因为理解简单,实现也很简单,但是复杂度是O(n2)O(n^2)O(n2),对于一些数据量稍大的,就当场gg了。学了一下二分法找一个序列的最长递增子序列。思想:(就是把原来的序列插入到一个新的序列中)开一个B数组,B[i]表示最长递增子序列长度为i的最小尾值。然后不断的去更新这个尾值。二分查找当前数要插入的位置,复杂度可以降到O(n∗lo原创 2020-07-13 10:39:28 · 920 阅读 · 0 评论 -
Educational Codeforces Round 83-D. Count the Arrays
题目传送门:D. Count the Arraysinput3 4output6input3 5output10input42 1337output806066790input100000 200000output707899035题意:给你n,m;让你构造一个长度为n的数列,要下面满足几个条件1.保证数列中所有的数都在1~m中,而且有且只有一个数出现过两次,其余数最多只能出现一次。2.数列中有一个要有这样一个位置i,在i之前的要严原创 2020-05-24 20:24:27 · 186 阅读 · 2 评论 -
codeforces #642(div3) D. Constructing the Array(优先队列)
题目链接:D. Constructing the Arrayinput612345611 22 1 33 1 2 42 4 1 3 53 4 1 5 2 6题意很简单,就是让你找最长的0串,然后在这串中间加上当前操作数。比赛的时候想错了,总想是到规律题,其实是模拟。(STL NB)#include<bits/stdc++.h>#include<stdio.h>#include<string.h>#include<std原创 2020-05-15 11:32:36 · 200 阅读 · 2 评论 -
ACM Computer Factory(网络毒流)
题目链接:http://poj.org/problem?id=3436题目大意给你n个机器,每个机器给你三部分数,第一部分,一个数,表示这个机器最大可以完成多少次这个操作,第二部分m个数,表示来这个机器前的状态要求,第三部分m个数,表示经过这个机器之后,形成的状态。全0表示最初状态,全1表示最终要转化成的状态。(初状态中,1表示一定要有,0表示一定要没有,2表示有没有都可以。)让我们求最大可以转换成最终状态的个数,并输出路径。思路一道毒瘤题,一点不假。。。先把每个机器拆开来,把初状态和末状态连一原创 2020-05-14 00:02:00 · 216 阅读 · 0 评论 -
Codeforces Round #641 (div 2 A~C)
比赛链接:https://codeforces.com/contest/1350*又是一个掉分自闭场,数学专场??,都给我打成 *了,无疑证明了,我是fw。补题补题 ???? ????A题简单推一下规律,发现n要是质数就加本身,不然就加2。#include<stdio.h>#include<stdlib.h>#include<string.h>#include<algorithm>#include<queue>#include&原创 2020-05-13 14:45:33 · 244 阅读 · 0 评论 -
网络流之Dinic算法
上篇记录了一下EK,这篇就记录一下我又从头再学的Dinic,(据说是目前最好用的网络流算法之一 (也可能没有之一) )。推荐博文:https://baijiahao.baidu.com/s?id=1612179096991409044&wfr=spider&for=pcDinic如果你搞明白了EK算法的话,其实Dinic就也不是那么的难以理解了。首先我们可以回想一下EK的思想,一句话就是不断bfs找增广路,直到找不到为止。当然Dinic在最大流中也是不断的找增广路,但是和EK的区别是它原创 2020-05-09 21:17:49 · 293 阅读 · 0 评论 -
网络流之EK算法
看了几天的网络流的相关的东西,其实是准备复习Dinic算法,但是顺便记录一下EK(以前刚学网络流的时候,直接上去学Dinic,(不知道听哪个大佬说的,网络流允许卡EK,但是绝对不能卡Dinic )EK碰都没碰,Dinic也没搞太明白,也没记录当时的学习过程,现在忘的一干二净,只能一下一下从头再来)。回到正题:EK算法EK,就是在整个网中不断的去找增广路。我们现在就以最大流为例,我们有一个起点S和一个汇点T,那么我们现在还有一些边在S,T之间(借用一张网图)。先说一下什么是增广路,若有一条从S出发到原创 2020-05-08 20:43:41 · 528 阅读 · 4 评论 -
D - Network(Tarjan+LCA)
题目传送门:POJ-3694可以这样说,不折不扣是到毒瘤题题目大意:给了我们一张图,然后再给你m条边,m次询问,每次加上一条边,问你这个图上剩余的桥还有多少个。思路:我们可以先Tarjan缩点,把一个集合的点缩成一个点,最后我们得到的一棵树,树上的边都是桥,然后我们开始加边(u,v),如果u和v在一个集合中(就是在缩点后是一个点)那么桥的数量不发生改变,如果不是,那么我们要找他们两个所在...原创 2020-04-29 16:14:48 · 196 阅读 · 0 评论 -
E - Redundant Paths(Tarjan缩点+树的直径)
题目传送门:POJ-3177题目大意:给你一张图,然后问你如果在这张图上再加上一条边,那么这个图上的桥的数量最少是多少。思路:我们可以先用Tarjan缩点,把这张图缩成一棵树,然后这树上的所有边都是这个图上是桥,那么我们可以找到这个树的最长的一条路,首尾连起来,让它成为一个环,那么减去的桥数一点是最多的,树上最长的一条路就是树的直径,也就是说这道题的答案就是先Tarjan求桥数然后减去新建...原创 2020-04-29 15:56:41 · 149 阅读 · 0 评论 -
1600 - Patrol Robot
题目传送门A robot has to patrol around a rectangular area which is in a form of m × n grid (m rows and ncolumns). The rows are labeled from 1 to m. The columns are labeled from 1 to n. A cell (i, j) deno...原创 2020-04-27 09:24:43 · 288 阅读 · 0 评论 -
How far away ?(LCA Tarjan算法)
题目传送门:HDU-2586这道题题意很简单,给你了n个村子,然后给了n-1条带权值的边,(就等于说给了你一棵树,m次询问,问你x道y的最小距离是多少。很明显就是让求两个点的lLCA,(倍增法还是很好用的),今天准备练习一下用Tarjan算法求一下LCA,就拿这道题来练练手了。Trajan求LCA算法是一个离线算法O(N∗M)O(N*M)O(N∗M),时间复杂度可能要比倍增法(O(N∗M∗l...原创 2020-04-24 16:53:53 · 257 阅读 · 0 评论 -
LCA(倍增法)
LCA(最近公共祖先):给你一棵树,然后给你两个点,让你找到这两个点的最近公共祖先,俩个点的公共祖先有很多,但是其中距离两个点的距离之和最小的那个祖先就是最近公共祖先。刚学了树上倍增法求LCA最近做了几个板子题,记录一下这种算法的基本,,,过程吧。fa数组:倍增关键数组,fa[i][j]表示以i开始找2j步的祖先,例如fa[i][0]就表示i的20的祖先也就是i的父结点。de数组:当前这个...原创 2020-04-22 14:51:00 · 1283 阅读 · 2 评论 -
B. Little Elephant and Array(莫队)
题目链接:B. Little Elephant and Arrayinput7 23 1 2 2 3 3 71 73 4output31题意:给你一个长度为n的数组,然后m次询问,每次询问L,R,范围内的总共有多少个出现次数和他数值本身相等的数。思路:确实是莫队的板子题,(莫队这个坑,去年到今年一直没填,正好具体的学一下思想和一些小方法)有一篇大佬的博客讲的...原创 2020-04-17 11:43:55 · 281 阅读 · 0 评论 -
口算训练(分解质因子+小思路)
题目链接:HDU-6287_口算训练Sample Input15 46 4 7 2 51 2 241 3 182 5 173 5 35Sample OutputYesNoNoYes题意就是给你一个数组,然后有m次询问,问你从L到R区间内的所有数的乘积能不能整除D。这道题呢,比赛的时候是想到了分解质因子,但是当时没有想到怎么比较[L,R]一段区间的质因子和D的...原创 2020-04-16 17:31:45 · 193 阅读 · 0 评论 -
D. Maxim and Array(贪心+优先队列)
题目链接:D. Maxim and Arrayinput5 3 15 4 3 5 2output5 4 3 5 -1input5 3 15 4 3 5 5output5 4 0 5 5input5 3 15 4 4 5 5output5 1 4 5 5input3 2 75 4 2output5 11 -5题意:给你一个长...原创 2020-04-16 10:57:26 · 370 阅读 · 0 评论 -
C. Eugene and an array(思路,前缀)
C. Eugene and an array题意:给你n个数的数组,让你求它的子区间和中不含0的区间总数。思路:前缀,我们可以记录这个数组的前缀,如果pre[i]==pre[j]pre[i]==pre[j]pre[i]==pre[j],那么就说明i到ji到ji到j之间和为0,那我们记录的就不能包含这个区间。这道题我们用mapmapmap寻找一个区间和为0的开头位置。我们ansansans每次...原创 2020-04-13 18:21:09 · 425 阅读 · 0 评论 -
D_Maya Calendar
题目传送门:Maya CalendarSample Input310. zac 00. pop 010. zac 1995Sample Output33 chuen 01 imix 09 cimi 2801中文题面:玛雅使用两种日历,第一种称为Haab,一年为365天,一年分为19个月,前18个月每个月都是20天,第19个月为5天,每一个月都有一个名字,分别为pop, ...原创 2020-04-10 22:30:04 · 231 阅读 · 0 评论 -
I - EXTENDED LIGHTS OUT
题目传送门:I - EXTENDED LIGHTS OUT 样例20 1 1 0 1 01 0 0 1 1 10 0 1 0 0 11 0 0 1 0 10 1 1 1 0 00 0 1 0 1 01 0 1 0 1 10 0 1 0 1 11 0 1 1 0 00 1 0 1 0 0样例输出:PUZZLE #11 0 1 0 0 11 1 0 1 0 10 0 1...原创 2020-04-09 11:11:29 · 228 阅读 · 0 评论 -
Ministry
传送门:1029. MinistryTime limit: 1.0 secondMemory limit: 64 MB题目Mr. F. wants to get a document be signed by a minister. A minister signs a document only if it is approved by his ministry. The ministr...原创 2020-04-06 17:54:43 · 255 阅读 · 0 评论 -
G - 土耳其冰淇凌
G - 土耳其冰淇凌 Gym - 101194D题目熊猫先生非常喜欢冰淇淋,尤其是冰淇淋塔。一个冰淇淋塔由K个冰淇淋球堆叠成一个塔。为了使塔稳定,下面的冰淇淋球至少要有它上面的两倍大。换句话说,如果冰淇淋球从上到下的尺寸是A0, A1, A2,···,AK 1,那么A0×2 ≤ A1, A1 × 2 ≤ A2,等等。有一天,熊猫先生在街上走着,发现一家卖冰淇淋球的商店。冰淇淋球共有N个,大小...原创 2020-04-04 16:10:05 · 204 阅读 · 0 评论 -
POJ——3090 Visible Lattice Points(欧拉函数)
题目传送门:POJ——3090 Visible Lattice PointsTime Limit: 1000MSMemory Limit: 65536KTotal Submissions: 10420Accepted: 6304DescriptionA lattice point (x, y) in the first quadrant (x and y are ...原创 2020-04-03 14:47:45 · 197 阅读 · 0 评论 -
单调栈/单调队列(小结)
以前感觉单调队列和单调栈很强,但是一直没有具体花时间来学,等于是来补锅了单调队列其实本质就是一个普通的队列,和优先队列还是有区别的,叫单调队列的原因是用这个普通的队列来维护一些单调增加或者单调减少的区间。引用一下思想:就是在决策集合(队列)中及时排除一定不是最优的选择。例题1:P1886 滑动窗口思路:我们用单调队列来记录两个东西,一个是这个数的位置,一个是这个数的数值,以区间最大值为例(...原创 2020-03-31 18:52:36 · 189 阅读 · 0 评论 -
HDU-4529 郑厂长系列故事——N骑士问题(状压dp)
题目链接:HDU-4529Sample Input21*...........*..........*.....*....*...........*..*.........*....2*...........*..........*.....*....*...........*..*.........*....Sample Output561409...原创 2020-03-25 14:52:56 · 199 阅读 · 0 评论 -
过河(离散,dp)
#include<stdio.h>#include<stdlib.h>#include<algorithm>#include<string.h>using namespace std;int dp[2000];int v[2000];int a[205];int main(){ int l,s,t,m; scanf(...原创 2020-03-22 21:12:07 · 262 阅读 · 0 评论 -
POJ-1185 炮兵阵地(状压dp)
题目链接:http://poj.org/problem?id=1185炮兵阵地Time Limit: 2000MSMemory Limit: 65536KTotal Submissions: 37531Accepted: 14352Description司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N *M的地图由N行M列组成,地图的每一格可能是山...原创 2020-03-20 11:05:46 · 197 阅读 · 0 评论 -
选拔赛G-一束鲜花(签到)
题意:给你数量为a,b,c的三桶花,用这些花让你组成一束m朵的花,有多少种不同的组法(要求这m朵中每种花最少要有一朵)。思路:直接暴力枚举,确定两种花的数量,最后一种的数量也就确定了,判断最后一种花能不能拿到就行。简单签到题。#include<bits/stdc++.h>using namespace std;int main(){ int a,b,c,m; ...原创 2020-03-20 10:52:43 · 115 阅读 · 0 评论 -
方格取数(1)(状压dp入门题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1565题意:给你N*N的方格中取数,但不能取相邻的数,(上下左右相邻都不行),求可以取的数之和的最大值。思路:一道状压dp入门题,因为给的n并不大,我们用一个n位二进制数来表示这一行的n个数取与不取的状态,因为一行之间相邻的不能取,所有我们可以把不符合的数全部筛选除去(i&i>>...原创 2020-03-19 16:20:57 · 360 阅读 · 0 评论