随笔分类 -  题解

摘要:题目传送门 看数据范围,N<=20! 你没看错,搜索都能过。 O(N^2)的做法,就是先求出有几对点之间的距离为圆周长的一半。 然后求C(N,2)即可。 code: 阅读全文
posted @ 2018-02-11 15:03 Cptraser 阅读(147) 评论(0) 推荐(0)
摘要:题目传送门 题目大意:Bash喜欢对数列进行操作。第一种操作是询问l~r区间内的gcd值是否几乎为x,几乎为表示能否至多修改一个数达到。第二种操作是将ai修改为x。总共Q个询问,N个数。 Solution:简单来说,就是对区间gcd值的维护,使用线段树实现。 code: 阅读全文
posted @ 2018-02-09 10:13 Cptraser 阅读(194) 评论(0) 推荐(0)
摘要:Problem A:题目传送门 题目大意:给你N家店,每家店有不同的价格卖苹果,ai元bi斤,那么这家的苹果就是ai/bi元一斤,你要买M斤,问最少花多少元。 题解:贪心,找最小的ai/bi。 #include <cstdio> using namespace std; double minn=2e 阅读全文
posted @ 2018-02-04 20:16 Cptraser 阅读(140) 评论(0) 推荐(0)
摘要:题目传送门 第一次看题目感觉毫无还手之力,一看M的范围≤15,果断状压。 但是状压的想法比较新奇。 先想到的状压是设f[i][j]表示前i个状态为j时的方案总数,但是后来想了一想不行,会超时。 于是以f[i][j]表示i状态匹配到第j位时的方案总数。 但判断转移是会超时,于是预处理串与串之间的关系。 阅读全文
posted @ 2018-01-29 15:43 Cptraser 阅读(118) 评论(0) 推荐(0)
摘要:题目传送门 看到数据范围就果断装压。 设f[i][j]表示i状态下最后一个数字为a[j]。 code: 阅读全文
posted @ 2018-01-24 18:58 Cptraser 阅读(129) 评论(0) 推荐(0)
摘要:题目传送门 其实打表找一找规律可以得出: 证明则是设q/p为一条直线的斜率。 p=q时则是求直线上的整点的横纵坐标和,p≠q时则是求直线上下整点的和。 code: 阅读全文
posted @ 2018-01-21 19:14 Cptraser 阅读(126) 评论(0) 推荐(0)
摘要:题目传送门 这道题一开始我还以为是贪心,sort一遍直接取中点然后求最优值。 但写了之后才发现错误,设置的谷仓只要是一段区间的中点即可。这段区间的两端一定是两片谷田。 所以枚举区间的左端点,二分右端点,但问题是如何O(1)判断? 设sumi表示1~i点的和。 L~R区间所需要的费用分成两段来求。 一 阅读全文
posted @ 2018-01-20 14:57 Cptraser 阅读(109) 评论(0) 推荐(0)
摘要:题目传送门 背包的变形,不得不说卡了我很久(估计是下午睡傻了)。 设f[i][j]为前i个物品剩下j个挂钩。 f[i][j]=max(f[i-1][j],f[i-1][max(j-a[i].x,0)+1]); 显然f[i-1][j]表示不挂,而f[i-1][max(j-a[i].x,0)+1]表示挂 阅读全文
posted @ 2018-01-17 16:48 Cptraser 阅读(118) 评论(0) 推荐(0)
摘要:题目传送门 由题意得是最小割问题,又由最大流最小割定理可得只需要求无向图的最大流即可。 建双向边,跑Dinic,EK会超时。 注意在DFS时要加"if(!res)dist[now]=0;"这句话,不然会超时。 这句话因为下次DFSnow这个点时得到的最小流量为0,所以就没必要DFS下去,一个剪枝。 阅读全文
posted @ 2018-01-14 20:21 Cptraser 阅读(159) 评论(0) 推荐(0)
摘要:题目传送门 裸的最小生成树。 code: 阅读全文
posted @ 2018-01-10 15:23 Cptraser 阅读(128) 评论(1) 推荐(0)
摘要:题目传送门 设x[i]表示i+1向i传的糖果数,x[n]表示1向n传的糖果数,a'=(a[1]+...a[N])/N a[1]+x[1]−x[n]=a' a[2]+x[2]−x[1]=a' a[3]+x[3]−x[2]=a' ⋯⋯ a[n−1]+x[n−1]−x[n−2]=a' a[n]+x[n]− 阅读全文
posted @ 2018-01-09 19:24 Cptraser 阅读(124) 评论(1) 推荐(0)
摘要:题目传送门 找规律。 画一个像这样的图: 不同颜色为不同层,因为函数图像可对称,所以只考虑K<=N/2的情况。 最小为min(K,N-K+1)*2。 N=1时特殊考虑,答案为1。 code: 阅读全文
posted @ 2018-01-09 12:56 Cptraser 阅读(85) 评论(1) 推荐(0)
摘要:题目传送门 Map水过(或set也行)。 code: 阅读全文
posted @ 2018-01-07 19:58 Cptraser 阅读(149) 评论(1) 推荐(0)
摘要:题目传送门 BZOJ水题,for i=1~N,答案加上N/i即可 ANS=∑N/i(i∈{1~N}) code: 阅读全文
posted @ 2018-01-07 19:56 Cptraser 阅读(120) 评论(1) 推荐(0)
摘要:题目传送门 差分约束基础,对于每种关系建不同的边,求是否有负环。 code: 阅读全文
posted @ 2018-01-07 19:51 Cptraser 阅读(148) 评论(0) 推荐(0)
摘要:题目传送门 较水,开两个桶即可。 题目可以理解为,将大于B的数看为1,小于B的数看为-1,将以B这个数为中位数的序列左右分为两半,加起来为0. code: 阅读全文
posted @ 2017-12-20 20:36 Cptraser 阅读(181) 评论(0) 推荐(0)
摘要:Fliptil(fliptile.pas/c/cpp) 【问题描述】 约翰知道,那些高智力又快乐的奶牛产奶量特别高。所以他做了一个翻瓦片的益智游戏来娱乐奶牛。 在一个M×N的骨架上,每一个格子里都有一个可以翻转的瓦片。瓦片的一面是黑色的,而另一面是白色的。对一个瓦片进行翻转,可以使黑变白,也可以使白 阅读全文
posted @ 2017-11-24 15:34 Cptraser 阅读(266) 评论(0) 推荐(0)
摘要:题目传送门 这道题比较水,设f[i][j]表示i~j区间合并的最大值。 #include <cstdio> #define max(a,b) a>b?a:b using namespace std; int N,x,f[250][250],ans; int main(){ scanf("%d",&N 阅读全文
posted @ 2017-10-22 19:24 Cptraser 阅读(182) 评论(0) 推荐(0)
摘要:题目传送门 初看这道题,以为是一道挺难的题目,但仔细看发现,不是只要爆搜就好了吗? 只需要对前12个素数进行爆搜即可。 一个数的因数个数=素数次数+1全部乘起来。 code: 阅读全文
posted @ 2017-10-20 18:07 Cptraser 阅读(216) 评论(0) 推荐(0)
摘要:A. Search for Pretty Integers: 题目传送门 题目大意:给定N和M个数,从前一个数列和后一个数列中各取一个数,求最小值,相同算一位数。 一道水题,读入A、B数组后枚举i、j判断最小值即可,注意相同时只需要一位。 B. Maximum of Maximums of Mini 阅读全文
posted @ 2017-10-16 15:44 Cptraser 阅读(203) 评论(0) 推荐(0)