Noip2019暑期训练2 反思】的更多相关文章

经过两次测试,通过深刻的反思,我主要发现了以下易犯错误: 1.做题目时过于追求速度,导致好几处代码都出现手误打错的现象!而且,千万不要图快.图方便就复制粘贴,非常容易出错!(例如T3-party中直接复制之前的代码然后忘记把“<”改成“=”了,光这个错误就找了好久,╮(╯▽╰)╭) 2.学过的知识不能灵活运用. 在T3-party这道题中,其实用floyed就可以拿到70分了!但是却偏偏要尝试没有太大把握的Dijkstra算法,而且还忘记了队列是怎么定义的! T4-tree其实也不难,可是一看到…
题目名称 时空定位 棋子移动 高精度乘法 数独游戏 存盘文件名 location piece mul sudoku 输入文件名 location.in piece.in mul.in sudoku.in 输出文件名 location. out piece.out mul.out sudoku.out 时限 1s 1s 1s 1s 内存限制 64MB 64MB 64MB 64MB 题1  时空定位(location) [题目描述] 张琪曼已经确定了李旭琳在一个长为20千米,宽为2千米的空间,她要在…
  题目名称 骑士遍历 和谐俱乐部 农场派对 对称二叉树 存盘文件名 knight Beautiful party tree 输入文件名 knight.in Beautiful.in party.in tree.in 输出文件名 knight.out Beautiful.out party.out tree.out 时限 1s 1s 1s 1s 内存限制 128MB 128MB 128MB 128MB 题1:骑士遍历(knight) [题目描述] 楚继光判断邪狼可能藏在一个n×n的(n≤10)正…
[小结] 中山纪念中学2018暑期训练小结(划掉)(颓废记)-Day10 各位看众朋友们,你们好,今天是2018年08月14日,星期二,农历七月初四,欢迎阅看今天的颓废联编节目 最近发生的灵异事件有 1.本人模拟赛直接打出T2目测全场唯一AC代码结果细节被O2直接卡掉 2.第16号台风在附近海区逗留3天成功画出一个D-og 3.卖文具的小卖店提前装修结束开业 4.考场上明知道能用生成树做的题目还要用二分做,结果全部T掉 5.去食堂路上开始下雨,到食堂之后雨停了.... 好不水了,说点正经的 最近…
ACM暑期集训总结报告 不知不觉,ACM暑期集训已经过去了一个月了(其实我还差几天才够一个月,因为最后几天要回家办助学贷款,所以没坚持到最后,当了个逃兵.....[汗])也到了结束的时候.在这一个月中, 有压力,有感触,也有喜悦.收获了很多,反思了很多. 知识方面,这一个月中, 主要是看了DP的内容,包括基础DP(主要是背包), 状压DP, 数位DP(掌握的不好), 树形DP.另外,每周有几场训练赛,通过训练赛的题目,既重温了已经有些模糊的一些知识点,学习到了新的知识点.最后,还参加了一场CCP…
题意与分析 很简单:求最长公共子序列. 注意子序列与子串的差别:一个不连续一个连续.一份比较好的参考资料见:https://segmentfault.com/a/1190000002641054 状态转移方程是这样的: 设dp[i][j]dp[i][j]为a串1~i.b串1~j中的最长的公共子序列,则 dp[i][j]={dp[i−1][j−1]+1,  max(dp[i−1][j],dp[i][j−1]),  a[i]=b[j],a[i]≠b[j]dp[i][j]={dp[i−1][j−1]+…
#include <bits/stdc++.h> using namespace std; vector<int> path; ; short dp[maxn][maxn][maxn][maxn][maxn]; bool tp[maxn][maxn][maxn][maxn][maxn]; int P,C,A,M; int p[maxn],c[maxn],a[maxn],m[maxn],g[maxn]; int main() { int n; scanf("%d"…
A:合并果子(贪心+优先队列) B:HDU 1789 Doing Homework again(非常经典的贪心) C:11572 - Unique Snowflakes(贪心,两指针滑动保存子段最大长度) D:POJ 1328 Radar Installation(很新颖的贪心,区间贪心) E:HDU 1053 Entropy(哈夫曼编码 贪心+优先队列) F:POJ 3122 Pie(二分+贪心) G:HDU 1735 字数统计(模拟+一点点贪心的思想) H:HDU 4864 Task(经典贪…
题意与分析 中文题就不讲题意了.我是真的菜,菜出声. 不妨思考一下,限制了我们决策的有哪些因素?一,所在的位置:二,所在的时间.还有吗?没有了,所以设dp[i][j]" role="presentation">dp[i][j]dp[i][j]为第i秒在j处的最大馅饼数,有: dp[i][j]=dp[i][j]=max(dp[i−1][j−1],dp[i−1][j],dp[i−1][j+1])+f[i][j]" role="presentation&q…
比赛链接 A-CSU - 1588 现在有n堆果子,第i堆有ai个果子.现在要把这些果子合并成一堆,每次合并的代价是两堆果子的总果子数.求合并所有果子的最小代价. Input 第一行包含一个整数T(T<=50),表示数据组数. 每组数据第一行包含一个整数n(2<=n<=1000),表示果子的堆数. 第二行包含n个正整数ai(ai<=100),表示每堆果子的果子数. Output 每组数据仅一行,表示最小合并代价. Sample Input 2 4 1 2 3 4 5 3 5 2 1…
题意与分析 学习本题的时候遇到了一定的困难.看了题解才知道这是二重背包.本题的实质是二重完全背包.二维费用的背包问题是指:对于每件物品,具有两种不同的费用,选择这件物品必须同时付出这两种代价:对于每种代价都有一个可付出的最大值(背包容量).问怎样选择物品可以得到最大的价值.设第i件物品的两种代价分别为$a_i$和$b_j$,两种代价可付出的最大值(两种背包容量)分别为$V$和$U$,物品的价值为$w_i$,那么我们可以改进原来的状态转移方程,则定义$dp[i][j][k]$为选前i件物品,前两个…
题意与分析 给定立方体(个数不限),求最多能堆叠(堆叠要求上方的方块严格小于下方方块)的高度. 表面上个数不限,问题是堆叠的要求决定了每个方块最多可以使用三次.然后就是对3n" role="presentation">3n3n的方格序列用LIS. 注意:排序和求LIS的标准不同,否则答案会错误. 代码 #include <iostream> #include <cstring> #include <algorithm> #includ…
题意与分析 完全背包问题. 算法背包九讲里面都有提到过,我自己再说下对完全背包的理解. 为什么01背包中遍历状态从VV到00?考虑一下基本方程$dp[i][j]=max(dp[i-1][j-w[i]]+v[i],dp[i-1][j])$,如果顺序,那么决定dp[i][j]dp[i][j]的就是dp[i][j−w[i]]dp[i][j−w[i]]而不是dp[i−1][j−w[i]]dp[i−1][j−w[i]]了. 然而, 完全背包的方程为dp[i][j]=max{dp[i−1][j−k∗w[i]…
题意 有n" role="presentation">nn个站点,排成圆形,每站间距m" role="presentation">mm,现从0点出发,提供t" role="presentation">tt个油箱,问:拿走若干个油箱可以让出发者无法到达任意一个站点,这样的方案有多少?(出发者可以顺时针走,也可以逆时针走)数据规模分别为:2 ≤ n ≤ 1000,1 ≤ m ≤ 120,1 ≤ t ≤ …
题意 给定一矩阵M" role="presentation">MM,Mij=ij" role="presentation">Mij=ijMij=ij,求第k大值. 分析 这个题不看题解我是想不到二分的,但是二分当然属于暴力,不爽不要玩;) 实际上,现在做题解的时候,意识到一个有意思的结论:第k大xxx往往都与二分思想有关.我们还会与分治思想再见的. 具体做法:二分第k大值p.求数组中p元素是第几大即可. 代码 #include <…
题意 You are given n points on a line with their coordinates $x_i$. Find the point x so the sum of distances to the given points is minimal. 分析 答案是直觉上显然的:输出数组的中位数即可(对于偶数个数的,则是中间靠左).这样的结果正确的原因也很显然.首先,答案肯定在$[x_{min},x_{max}]$中,那么点无论在哪里,对于$x_i,x_{n-i}$这一对…
题目 分析 这个Rnd353真是神仙题层出不穷啊,大力脑筋急转弯- - 不过问题也在我思维江化上.思考任何一种算法都得有一个“锚点”,就是说最笨的方法怎么办.为什么要这么思考,因为这样思考最符合我们的思维规律.然后从这种最笨的方法中找问题.找漏洞.找关键的变量不变量,就能转化出更好的更快的算法. 这题就是这样.最笨的方法是什么?随便从哪个点出发,按照一个方向一个一个抹平差距.可以保证,n-1次一定完成.那么哪里可以改进?0区间.0区间的时候我们可以不移动:比如说 0 0 2 -2 0 0,那么只…
题意 给定一定条件,问符合的矩阵有几种. 分析 见了鬼了,这破题谁加的brute force的标签,素质极差.因为范围是1e5,那你平方(枚举算法)的复杂度必然爆. 然后你就会思考其中奥妙无穷的数学规律(并没有),推出一系列相关的等式. 然后坑爹无穷的来了:边界问题. 不想说了,心累,自己看代码吧. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB push_back #define fi first #define se…
题意 之后补 分析 我哭了,强行增加自己的思考复杂度...明明一道尬写的题- -(往区间贪心方向想了 其实完全没必要,注意到只有366天,直接穷举判断即可. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB push_back #define fi first #define se second #define ZERO(x) memset((x), 0, sizeof(x)) #define ALL(x) (x).begi…
题目链接 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第一行是测试数据的数目t(0 <= t <= 20).以下每行均包含二个整数M和N,以空格分开.1<=M,N<=10. Output 对输入的每组数据M和N,用一行输出相应的K. Sample Input 1 7 3 Sample Output 8 分析: 设f(m,n) 为m个苹果,n个盘子的放法数目,则先对n作讨论, 当n…
题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=1698 题目大意: 有一个钩子有n条棍子组成,棍子有铜银金三种组成,价值分别为1,2,3.为了对付每场战斗需要对组成钩子某个区间的棍子进行调整.问经过q次调整后钩子的总价值是多少? 解题思路: 线段树更新.因为数据范围的问题,每次更新到节点会TLE.用区间更新就会节省很多的时间,对每一个区间来讲,如果这个区间里面的棍子都是相同类型的,就用一个节点变量记录棍子类型,如果区间内棍子是不同类型,则将变量记…
题目连接: http://www.lightoj.com/volume_showproblem.php?problem=1084 题目大意: 有n个点在一条以零为起点的坐标轴上,每个点最多可以移动k,问最终能不能把所有点都聚集在大于等于三个点的集合里面,如果能最少需要几个这样的集合? 解题思路: 刚开始看到题目感觉好简单,就开始了sort然后贪心之旅,这就是错误的开始.最后发现这样并不行,然后再Alex的提醒下想用单调队列优化,在我愚昧的理解下竟然写成了bfs,提交竟然ac了,surprise~…
题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=1506 题目大意: 给出一个数列An,问以Ai为最小值的区间内有多少个元素? 解题思路: 手动模拟一个栈.栈内元素为一个单调不递减序列.当新元素Ai需要进栈,如果栈顶元素大于Ai,弹出栈顶元素,直到栈顶元素不大于Ai,Ai进栈. 这里可以保证i是高为栈顶元素的矩形向后延伸的边界,弹出过程中记录高为Ai的矩阵向前延伸的边界. //#include <bits/stdc++.h> #include &…
题目连接: http://poj.org/problem?id=3468 题目大意: 给出n个数,有两种操作: 1:"C a b c",[a,b]中的每一个数都加上c. 2:"Q a b",求[a,b]中每个数相加的和. 解题思路: 线段树更新到每一个节点的话,由于节点数目和查询次数原因会tle,所以在每一个节点内定义一个标志变量表示当前节点的下一层为更新,每次查询时候有需要的话在更新到下一层. #include <cstdio> #include &l…
题目连接: http://acm.fzu.edu.cn/problem.php?pid=1894 解题思路: 因为出队和入队都满足队列的性质,优先单调队列的优先级有进入队列的顺序和人品的高低,在一段区间中如果出现x[i]是最大的,那么[0,i-1]区间内的数就不用记录了,所以单调队列里面可以按照人品值降序排列,输出的时候判断一下当前元素是否已经出队即可. #include <cstdio> #include <cstring> using namespace std; ; stru…
题目连接: http://poj.org/problem?id=3264 题目大意: 有n个数从1开始编号,问在指定区间内,最大数与最小数的差值是多少? 解题思路: 在节点中存储max,min,然后查询指定区间的max.min. #include <cstdio> #include <iostream> #include <algorithm> using namespace std; ; const int INF = 0x3f3f3f3f; struct node…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 第i只动物如果饲养它的话. 代价是固定的就是(n-i+1)a[i] 所以相当于给你n个物品,每个物品的重量为(n-i+1)a[i],价值为1 背包容量为x 问你最大价值是多少. 但因为价值是单位价值. 所以直接重量小的优先选就好了. 不够了就停止. [代码] #include <bits/stdc++.h> #define LL long long #define rep1(i,a,b) for (int i = a;i &l…
[链接] 我是链接,点我呀:) [题意] 让你确定一个最小的k 使得1..k这些比赛的结果能够推导出所有人之间的实力大小 [题解] 如果关系越多.那么就越能确定所有人之间的大小关系. (多一点也能唯一确定.不嫌多 那么就二分一下k. 做一个拓扑排序. 如果能做唯一的拓扑排序.那么就ok 否则返回false. [代码] #include <bits/stdc++.h> #define LL long long #define rep1(i,a,b) for (int i = a;i <=…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 给你一棵树. 让你统计其中子树T的数量. 这个子树T要满足最大值和最小值之差小于等于d 树形DP 可以枚举点root为子树的根. 统计以root为根的子树的个数. 根据每个儿子节点选或者不选. 如果选.则看看它是否满足以下条件: 权值小于等于根节点的权值. (等于根节点的时候,要求该节点的标号<根节点的标号,不然会重复计数) 然后假设当前是枚举的第i个儿子 那么cnt表示的是这个根节点和前i-1个节点能形成的满足子树(是一个联通…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每一位显然只要取1..60这些数字. 然后需要保证每个这些数字里面,每个数字所用到的质因子都它所唯一拥有的.别人不能用 因为如果别人用了的话.gcd就不为1了. 因此我们肯定需要记录这些数字的质因子使用情况. 如果第i个位置枚举的数字,它里面的某个质因子,之前用过了.那么这个数字就不能用. 否则还可以用. 只需取前16个质数就能够表示1..60这些数字了 (其实只要取到58就好了,所以59这个质数不用,因为选59和选1的代价是一…