05 2020 档案
摘要:树上最大子列和,开一个dp数组表示以当前节点为起点的路线最大能量值为多少,然后就是一些状态的转移。 #include<bits/stdc++.h> using namespace std; const int maxn=2e5+100; typedef long long ll; vector<in
阅读全文
摘要:Keadin非常苦恼,他马上就要去阿里实习了,但根据公司的规定,在此之前他要为自己取一个在公司内使用的花名,Keadin的取名困难症犯了。他想了一个选出自己花名的规则,但这个规则太复杂所以他想请你帮忙。出于羞耻心和公司的保密要求,Keadin加密了所有字符串,因此你看到的所有字符串都只包含0、1两种
阅读全文
摘要:/* * CF1355E * 题意: * 给你一个长度为n的数组,你可以向一个元素加1,代价为A,也可以向一个元素减1,代价为R, * 还可以把一个元素的1移动到另外一个元素上,代价为M。 * 现在要求你做一些操作,使得所有元素高度相等。 * 题解: * 根据题意,合法答案应该在最小值和最大值之间。
阅读全文
摘要:题意: 给你一个序列,如果有一个数满足序列里的一段子序列的和等于这个数,那么就称这个数为特殊数。 请你计算有多少个特殊数。 题解: 观察数据范围,我们可以构造一个桶记录每个数的出现次数,再枚举所有前缀和统计,用完这个桶就把它清空,时间复杂度O(n^2)。一开始写的map做法也是这个复杂度不知道为什么
阅读全文
摘要:/* * CF1350E * 题意: * 给出一个n*m的01矩阵,q组询问,称一个方格(i,j)是好的,当且仅当至少有一个 * 与(i,j)相邻的方格颜色与(i,j)相同,经过一个回合后,好方格的颜色改变而不好的方格颜色不变。 * 每组询问给出i,j,p,问p回合后方格(i,j)的颜色是什么。 *
阅读全文
摘要:题意: 给出一个序列,每次操作可以选择一段子序列,使得里面的最小的比中位数大的值为t,子序列所有的值都变成这个t。(子序列长度len,中位数(len+1)/2)。 现在给出一个数k,询问能否通过操作把整个序列变成k。 题解: 找规律可以发现,我们需要序列里有一个数是k,同时需要存在两个大于等于k的数
阅读全文
摘要:题意: 给出一个序列,两两之间的最小公倍数可以组成一个集合,计算这个集合的最大公因数。 题解: 第三题一般不会涉及算法,还是要向二分或前缀和的方向想一下。对于a1与剩下所有的数组成的最小公倍数,可以推导出: gcd(lcm(a1,a2),lcm(a1,a3)....lcm(a1,an)) = lcm
阅读全文
摘要:题意: 给出一个序列,请你找最长上升子序列,但要保证子序列里的从小到大的下标满足被整除的关系。 题解: 一开始一直tle,后来我的做法是从1到1e5预处理出每个数的因子,用邻接表存起来,然后就是最基本的上升子序列问题了。 #include<bits/stdc++.h> using namespace
阅读全文
摘要:参考巨巨的博客https://www.cnblogs.com/pkgunboat/p/9974886.html /* * CF1077F1 * 题意: * 给你一个n个元素的数组,从中选取X个元素,并且要保证任意的m个位置中至少有一个元素被选中,问选中元素和的最大值。 * 题解: * 设dp[i][
阅读全文
摘要:题意: 给出一串序列,请你找出一个大小为k的元素集合,使得可以在这个序列中找到数量最大的集合拷贝。 题解: 一开始想到背包去了,其实不用这么麻烦,以拷贝数为条件做一个二分查找,时间复杂度nlogn。 #include<bits/stdc++.h> using namespace std; const
阅读全文
摘要:题意: 给出一些人,他们有各自的害怕程度,害怕程度为k的人所属的团队人数必须大于等于k,请你分尽可能多的组,不一定所有人都要有组。 题解: 贪心的做法,每种人的人数除k,同时把余数给下一组人。 #include<bits/stdc++.h> using namespace std; const in
阅读全文
摘要:题意: 有两种操作:一种是把一个元素加入到集合中,一种是删除集合中第k个元素,求解最后集合里的元素。 题解: 祖传的树状数组套二分,这种题可遇不可求,比赛时直接秒了,不太会出现这么裸的数据结构题了,,, #include<bits/stdc++.h> using namespace std; con
阅读全文
摘要:题意: 给出一个奇数边的正多边形,请你计算它最小的内接正方形的边长。 题解: 要推一下公式,比赛的时候来不及了,赛后也是蒙蔽。。。 #include<bits/stdc++.h> using namespace std; #define PI acos(-1) int main() { int t;
阅读全文
摘要:题意: 给出一个正偶数边的多边形,计算它最小的外接正方形的边长。 题解: 草稿纸算一下就行,不会派的定义和调用C++内置的三角函数方法,花了不少时间。。。 #include<bits/stdc++.h> using namespace std; #define PI acos(-1) int mai
阅读全文
摘要:题意: 给出一个序列,只可能出现123,询问最长的同时包含1的子序列的长度。 题解: 用三个变量保存123的最近的上一次出现的位置,用当前位置减去三个前驱位置的最小值再加1,就是符合条件序列的长度。 #include<bits/stdc++.h> using namespace std; const
阅读全文
摘要:看大神的代码一脸懵,学了很多新东西,背包理解的太浅了,二分图染色不太会。 题意: 给你一个不保证连通的无向图,请你给图上的所有节点染色,有三种颜色1,2,3,并且事先给出三种颜色的点数n1,n2,n3,并且需要请你保证每条边相连的两个节点的颜色编号之差的绝对值等于1,请你判断是否存在合法方案,并输出
阅读全文
摘要:题意: 美丽的序列是指:序列中包含一对相邻元素,它们的差小于等于M。 现在给出一个序列,请你计算其中美丽的子序列的个数。 题解: 当初做的时候线段树基本功不扎实没有写出来。隔了三个月再看感觉挺简单的。 由于美丽的序列定义,可以发现美丽的序列实在是太多了,所以解法是反其道而行之,先求出不美丽的序列数量
阅读全文
摘要:人生第一道树套树的题,看着bin巨的代码才学会,太累了,文字明天补 #include<bits/stdc++.h> using namespace std; const int maxn=60010; int n,q,m,tot; int a[maxn]; int t[maxn]; int T[ma
阅读全文
摘要:/* * K-periodic Garland * 题意: * 给定长度为n的01字符串,每次操作可以改变一个字符的状态,问使得字符串中相邻1的距离为k的最小操作次数 * 题解: * DP。 * pre[i]记录前i项中1的个数。 * dp[i][0]为使得前i项都合法,第i位为0时的最小操作次数。
阅读全文
摘要:题意: 给出一串初始值全为0的序列,每次操作找到最长的连续为0的子区间,如果有并列则取靠左的那个,修改区间的中间值为对应操作的编号,询问最后的序列状态。 题解: 枚举最大子区间,一开始想到的是双指针法,结果TLE了,看了网上的题解才知道可以利用题目的性质用优先队列做,太神奇了。。。 #include
阅读全文
摘要:题解: /* * hdu2069 * 题意:给出五种面值的银币,分别是1,5,10,25,50 * 对于给定数字x,求解有多少种银币组合的方法。 */ #include<cstdio> #include<iostream> #include<cstring> using namespace std;
阅读全文
摘要:题意: 给出一些事件的开始时间和持续时间,你必须在开始时间前做这件事,做完才能做别的,每件事有固定的报酬,询问怎么安排报酬最大。 题解: 可以写出DP方程: 这里的mmax表示这个事件开始时间之前所能达到的最大报酬。 dp[ed]=max(dp[ed],mmax+Node[i].w); 然后从1到N
阅读全文
摘要:public int getBookCount () throws BaseException{ //要求返回该出版社的图书数量 int cnt=0; Connection conn = null; try { conn = DBUtil.getConnection(); String sql =
阅读全文
摘要:Zweib很喜欢回文串,每当看见回文串,他就会觉得很快乐。当且仅当字符串z首位倒置后仍然与原来的串z完全相同时,z 被称为回文串,例如 abcba,abba,a是回文串,而 ab,abcca不是回文串。 这一天Zweib突发奇想,如果用有一个字符串 t是由2个非空的回文串 x 和 y 组成的(,>0
阅读全文
摘要:裂开,周赛对博弈论一无所知。。。 /* * zoj3591 Nim * 题意: * 就是,给几个数,可以求出每堆石子数,要求有多少个连续段可以,有必胜的把握! * 如果枚举的做法,肯定会超时,做法是先求出必败的个数,再用总数相减。 * 用c[i]表示前i项的异或和,那么如果c[i]=c[j],那么i
阅读全文
摘要:/* * hdu6601 * 题意: * 给你一个长度为n的序列,有q个询问,每个询问给你一个区间[l,r],每次询问问你在区间[l,r]中,能够组成的最大的三角形的周长 * 分析: * 因为三角形具有两边之和大于第三条边,利用这个性质,每次询问贪心的去枚举 * 第k大,第k+1大,第k+2大去比较
阅读全文
摘要:/* * hdu6599 * 题意: * 判断长度从1到len的子串中有多少回文串,且前一半也为回文 * 题解; * 用回文树求出本质不同的回文串,对每个回文串的前一半再判断是否为回文 */ #include<cstdio> #include<cstring> #include<algorithm>
阅读全文
摘要:/* * hdu6598 * 题意: * n个士兵,m个组合 * 每个士兵可以专职战士或者魔法师 * u和v组合,两个战士战力+a,两个法师战力+c,其他战力+b * 求解最多加多少战力 * 题解: * 经典网络流模型。 * 对每个士兵建立一个点x,点x向源点s连一条边,向汇点t连一条边。 * 分别
阅读全文
摘要:/* * hdu6592 * 题意: * 给你一个数组,让你求出最长的字典序最大的和最小的单峰子序列 * 思路: * 考虑dp。 * L[i][0]表示a[i]一定取,序列a[1~i]的最长上升子序列长度 * L[i][1]表示a[i]一定取,序列a[1~i]的最长单峰子序列长度 * R[i][0]
阅读全文
摘要:给定一个字符串,主角需要用打字机将字符串打出来,每次可以: (1)花费p来打出任意一个字符。 (2)花费q将已经打出的某一段子串复制到后面去。 求解最小花费。 题解: 考虑dp。 设置dp[i]表示已经打出前i个字符的最小花费,这样设置状态是没有后效性的。 那么显然有: dp[i]=dp[i-1]+
阅读全文
摘要:/* * 题意:有三个序列,每次操作可以把一个序列中的一个数移动到另一个序列中 * 问:最少几次操作后,可以使得a序列里的所有数小于b里面的所有数,b里面的小于c里面的 * 数字不重复 * 做法: * 分别对三个序列排序,然后合并。 * 求最大上升子序列,然后上升子序列里的数不动,只移动非序列里的,
阅读全文
摘要:题意: 你们大学有n个学生。第i个学生的编程技巧是人工智能。作为教练,你要把他们分成几个小组,为即将到来的ICPC决赛做准备。想象一下,如果这所大学有2⋅105名学生准备进入期末考试,那该有多好! 每队至少由三名学生组成。每个学生应该属于一个团队。团队的多样性是属于该团队的某个学生的最大编程技能与属
阅读全文
摘要:小明是一个国王,他的国家有n个城市 现在小明想为这n个城市制造m条路径(路径都是有向的),现在小明有k种不同种类的材料,可以用来制造路径 无自环,无重复边 在制造路径的时候,小明不想看到一个环的路径都是由一种材料制造成的,这样小明就会生气 现在问你这个k最小值应该是多少呢 题解: /* * CF12
阅读全文
摘要:给你一个序列a1,a2,…,an,由整数组成。 您可以将以下操作应用于此序列:选择某个整数x并将等于x的所有元素移到a的开头或结尾。请注意,您必须在一个操作中沿一个方向移动所有这些元素。 例如,如果a=[2,1,3,1,1,3,2],您可以在一次操作中获得以下序列(为方便起见,将等于x的元素表示为x
阅读全文
摘要:给出了一个由n个顶点组成的加权树。回想一下,树是一个没有圈的连通图。顶点ui和vi通过带权重wi的边连接。 让我们将树的k-着色定义为每个顶点的k-着色,这样每个颜色的使用次数就不会超过两次。你可以假设你有无限多的颜色可用。我们说,如果一条边的端点共享至少一种颜色(即存在一种指定给两个端点的颜色),
阅读全文
摘要:题意: 给你一张 n 个点的完全图,其中有 m 条边长度为 1,其余全为 0。问你这张图的最小生成树为多少。 题解: 就是求补图的连通块数量减一,可以用set的count函数来建立补图,具体看代码。 #include<bits/stdc++.h> using namespace std; const
阅读全文