随笔分类 - ACM
大二到大三不堪回首的记忆....
摘要:原题链接 考察:贪心 一开始的思路是两两小岛构造一个半径为d的⚪,没做出来,⚪的交集太难求. 思路: 这道题的思路不是每个雷达覆盖尽可能多的岛,而是每个岛能被x轴上哪些点覆盖.对于每个岛求出它在x轴被覆盖的最小坐标和最大坐标,这样形成的区间就是能覆盖该岛的坐标区间.这样就转化成区间选点问题. 1 #
阅读全文
摘要:原题链接 考察:贪心 与七夕祭是差不多的题目 思路: 有两种推导方式,一种是前缀和一种是解方程的方法推导. 主要是讲第二种方式,假设第一个人给第n个人x1个,第二个人给第一个人x2个,以此类推,最后ans = x1+x2+x3...+xn(每一个都是绝对值).假设所有人的糖果平均数是ax,可以得出方
阅读全文
摘要:原题链接 考察:贪心 思路: 任何跨度>1的交易都能变成长度 = 1的交易.设价格 a,b,c. 假设a买入c卖出为最优解. 那么最大收益 = c- a = c-b+b-a.如果b<a,那么b买入更优,与假设不符.所以b一定>=a. 1 #include <iostream> 2 #include
阅读全文
摘要:原题链接 考察:图论 思路: 一道和这极像的题目 212. 计数交换 但是计数交换比本题难多了.这道题关键在于发现将序列变成升序的次数就是环的长度-1.用a[i]数组记录第i个位置是什么数,可以发现i与a[i]之间能连成环.用dfs找环长度即可. 或者可以用贪心法,只要不在应该在的位置上就交换. 1
阅读全文
摘要:原题链接 考察:双指针 思路: 很明显的双指针裸题,当i往前一步的时候,j要保持在与i在D的距离外. 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <set> 5 using namespac
阅读全文
摘要:原题链接 考察:模拟 错误思路: 完全按题目意思走,暴力模拟.时间复杂度O(1010) ,TLE 正确思路: 压缩处理,记录商店上次处理的时间,用本次的时间-上次处理的时间-1,就是到本次时间该商店应该-1的次数,因为每次都是减去相同的数,所以可以压缩到一起.同理,在某一时刻可能会有多份相同的订单,
阅读全文
摘要:原题链接 考察:模拟 这道题如果我自己写会写得超繁琐.... 思路: 飞行时间 = 到达时间-出发时间+时差(时差由东向西为减,由西向东为加).可以发现将两次飞行的时间相加再/2就能得到飞行时间. 这题注意记录sscanf的用法,在某些地方非常好用. 注意getline使用前一定要检查是否前面有换行
阅读全文
摘要:原题链接 考察:模拟 没什么难度,主要是记录一下从0开始和从1开始计算行号与列号的区别 从0开始: 行 = n/w,列 = n%w 从1开始: 行 = (n-1)/w,列 = (n-1)%w+1 1 #include <iostream> 2 #include <algorithm> 3 #incl
阅读全文
摘要:原题链接 考察:枚举 错误思路: 直接从a,枚举到b,如果不符合正常日期就continue 本蒟蒻TLE了,这方法可能有卡常大神能过吧... 正确思路: 构造回文日期,如果在[a,b]区间内就ans++. 注意的是0229这个时间,虽然9220属于闰年但是不要忘记考虑. 1 #include <io
阅读全文
摘要:原题链接 考察:双指针 or 二分排序 or 前缀和 思路: n<=105 n2的时间复杂度也会超时,所以我们只能枚举一个数,这就必须要利用乘法原理求得答案,已知题目要求 ai<bj<ck如果我们枚举aior ck可以发现无法省略其他层枚举,而我们枚举b,c与a就能利用乘法原理,找到小于bj与大于b
阅读全文
摘要:原题链接 考察:枚举 错误思路: 三层for循环暴力. 做多了区间dp...枚举区间只能想到按长度枚举区间,但这道题不能这么枚举..... 正确思路: 按区间端点来枚举区间,连号区间的特点是最大值-最小值 = 右端点-左端点.随着区间向右边延长,而动态记录最值. 1 #include <iostre
阅读全文
摘要:原题链接 考察:模拟(?) 思路: 最关键的一点是要想到当两只蚂蚁碰面时,相当于它们穿过彼此.这道题两只蚂蚁只关心它们是否感冒,而不关心它们原本的序号. 再做一次WA了4次....注意一下坑点,我们只能感染与第一只蚂蚁同向且位置>第一只蚂蚁的..... 而且要判断到底能不能去感染右边的!!!! 1
阅读全文
摘要:原题链接 考察:hash 思路: 正常是四重for循环枚举,但是由时间复杂度而言我们只能枚举2个数,此时考虑用空间换时间:预处理平方和. 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 using namespa
阅读全文
摘要:原题链接 考察:二分 or 递推 思路一: 二分初始能量值,check函数检查即可.要注意的是每次E都+=E-h,也就是 E = 2*E-h. 2100000不管用什么数据类型都会爆,因此必须考虑别的做法:此时思路有二: 高精度,但是高精很慢,尽量避免高精 避开运算,在E一定满足条件就return
阅读全文
摘要:原题链接 考察:找规律(?) 发现规律后代码超短..我还想复杂了... 思路: 第1项是k0 第2项是k1 第3项是k0+k1 可以发现指数和第n项的二进制排列相同..通过这个制造映射,求出答案 1 #include <iostream> 2 #include <algorithm> 3 #incl
阅读全文
摘要:原题链接 考察:线性dp or 暴力枚举 思路一: 预处理前缀和,四个for循环枚举边界. 思路二: 55. 连续子数组的最大和 根据这道题的思路,f[i]定义为以i结尾的最大连续和,集合划分分为长度为1和长度>1, 当长度为1 状态转移方程为f[i] = a[i],当长度>1,说明至少包含i,为f
阅读全文
摘要:原题链接 考察:STL(?) 思路: 最简单的做法:next_permutation 全排列. 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 const int N = 10010; 5 int a[N];
阅读全文
摘要:原题链接 考察:枚举 错误思路: 第一想法是两个对顶堆维护最大值和最小值,但是遇到这样的 0 2 21 0 19 的数据会出错.原因是当第一次修改a[n]与a[1]符合距离17后,与a[2]不一定符合距离17,但是题目约定只能修改一次a2+b2 <= (a+b)2这样会使得结果小了.同理每次sort
阅读全文
摘要:原题链接 考察:唯一分解定理 这题不会,果然我是不配学OI的 思路: 易知只有当阶乘出现了2和5才能有一个0, 由唯一分解定理 n! = 2a3b5c....,当我们把n!的2和5的共同凑成10的因子全部除去后,再%10就能得到答案.这个答案为 2a-min(a,c)%10*5c-min(a,c)%
阅读全文

浙公网安备 33010602011771号