09 2017 档案

摘要:找最大的四边形或者三角形面积,先求凸包,然后枚举两个点,再通过旋转,找最大的另两个点 #include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #defin 阅读全文
posted @ 2017-09-29 17:34 walfy 阅读(397) 评论(0) 推荐(0)
摘要:这题主要就是解码过程很恶心,不能用char存,一共wa了20发 题意:先给n串加密后的字符,然后m串加密后的字符,解码之后求n对应每个m的匹配数,很显然的ac自动机 加密过程是先用对应ascii表的标号来代替字符,然后把这些数字转换成8位的二进制,全部连起来,然后每6位算一个数,用二进制算成整数,最 阅读全文
posted @ 2017-09-29 09:02 walfy 阅读(273) 评论(0) 推荐(0)
摘要:这题想了很久没思路,不知道怎么不sort维护二维的最小值 emmmm原来是线段树/树状数组,一维sort,二维当成下标,维护三维的最小值 #include<bits/stdc++.h> #define fi first #define se second #define mp make_pair # 阅读全文
posted @ 2017-09-28 13:49 walfy 阅读(230) 评论(0) 推荐(0)
摘要:C:给n和k要求,找出n个不同的数,使得亦或起来等于k 可以先预处理从1到1e5,找亦或起来等于(11111111111111111)(二进制)的所有对数,然后四个一起亦或就是0了,再和k亦或 可以看出要分四种情况讨论,对于n%4=p的情况,应该找到p-1个不同的数亦或起来等于0,可以小范围的p-1 阅读全文
posted @ 2017-09-28 11:51 walfy 阅读(215) 评论(0) 推荐(0)
摘要:A:n个数,看能不能找出只有两种数,而且数量相同 #include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define pii pair<int,int 阅读全文
posted @ 2017-09-26 16:51 walfy 阅读(159) 评论(0) 推荐(0)
摘要:和上一题有点相似,但是这题是求包含的,并且还要求和 可以求所有情况-不包含的情况,所有情况可用矩阵快速幂求得 还有一点就是如果题目说答案余2^64,直接开unsigned long long就行了,会自动取膜的 #include<bits/stdc++.h> #define fi first #de 阅读全文
posted @ 2017-09-22 15:22 walfy 阅读(290) 评论(0) 推荐(0)
摘要:给m个子串,求长度为n的不包含子串的母串数,最直接的应该是暴搜,肯定tle,考虑用ac自动机 将子串建成字典树,通过next表来构造矩阵,然后用矩阵快速幂求长度为n的数量 邻接矩阵https://wenku.baidu.com/view/d7b9787f1711cc7931b716b0.html 对 阅读全文
posted @ 2017-09-21 16:35 walfy 阅读(261) 评论(0) 推荐(0)
摘要:傻逼多组测试,想了很久不知道为什么wa,结果是多组测试 ac自动机很多时候就是对End数组的操作,这题是用End数组记录末尾的字符串,query的时候sum综合一下End数组 #include<bits/stdc++.h> #define fi first #define se second #de 阅读全文
posted @ 2017-09-19 18:32 walfy 阅读(174) 评论(0) 推荐(0)
摘要:这题还是ac自动机裸题,只不过就是格式很烦人 有几个坑点:输入可能有空格,ascll可见字符从32开始到126有95个 wa点,用string输入,不能含空格,用scanf输入字符数组时没有memset,每次计算set里面的末尾值之后就清空了 #include<bits/stdc++.h> #def 阅读全文
posted @ 2017-09-19 16:28 walfy 阅读(156) 评论(0) 推荐(0)
摘要:貌似字典树也能过,原理不多赘述了,主要就是字典树+kmp 设匹配串长度为n,模式串共m个,第i个记为si。 时间复杂度为O(n+∑mi=1length(si))。 ac自动机大致就是用字典树存下每个分串,再处理出fail数组,最后根据母串和fail数组进行逐一匹配 在对fail数组进行处理的时候,f 阅读全文
posted @ 2017-09-18 19:43 walfy 阅读(169) 评论(0) 推荐(0)
摘要:很久之前刷的专题,今天准备学ac自动机打算复习一下,突然发现博客里没有= = 所以把模板拉过来 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include< 阅读全文
posted @ 2017-09-18 15:44 walfy 阅读(115) 评论(0) 推荐(0)
摘要:题目大意就是给两个长度相同的字符串,每次操作能使一段变成相同的一个字符,要求是串1变成串2的最小操作数目 (先假设从一个完全不相同的字符串变成串2)先用区间dp求出任意两点之间的最小操作数,dp[i][j]是i到j 的最小操作数 然后用一个数组求串1到串2的最小操作数,对于某一点,如果s[i]==p 阅读全文
posted @ 2017-09-14 16:43 walfy 阅读(193) 评论(0) 推荐(0)
摘要:转移方程:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]+(sum[j]-sum[k])*(k-i+1)+a[i]*(k-i)); 一开始思路好像出了一点问题,我是考虑每次更新时把k放到第j个位置,然后k+1到j整体前移,但是不知道错在哪里了, 正解是,对于转 阅读全文
posted @ 2017-09-14 10:16 walfy 阅读(149) 评论(0) 推荐(0)
摘要:转移方程是dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+mul[i][k][j]); k是中间的那个数,每次更新k的值 #include<map> #include<set> #include<cmath> #include<queue> #include<stac 阅读全文
posted @ 2017-09-14 10:12 walfy 阅读(184) 评论(0) 推荐(0)
摘要:对于这一题想了很久真的是一点头绪也没有,还有组数明明是200,数据范围100,O(n^3)的复杂度居然不会爆掉(可能是因为一直在想怎么用O(n^2)的复杂度做这题 做法是先预处理dp,对于dp[i][i]只能等于1,因为dp数组代表i到j的最小带的衣服数量,从下至上更新 对于每一次的dp[i][j] 阅读全文
posted @ 2017-09-12 19:04 walfy 阅读(185) 评论(0) 推荐(0)
摘要:poj不支持bits/stdc++.h这个头文件就很坑,区间dp,第一重循环是长度,第二重是起点,第三重是遍历起点到终点 dp[i][j]代表i到j最大匹配数目,每次枚举了起点之后判断一下是否出现了()【】匹配 复杂度O(n^3) #include<map> #include<set> #inclu 阅读全文
posted @ 2017-09-11 15:51 walfy 阅读(135) 评论(0) 推荐(0)
摘要:题意:求某一区间内的平衡数个数(指一个数,其中出现过的数,如果是偶数,那么必须出现奇数次,反之偶数次) 题解:用三进制来枚举(0到9)所有情况,0代表没有出现,1代表出现奇数次,2代表出现偶数次dp【i】【j】i代表位数,j代表状态,在记忆化搜索的时候要记录0是否出现过 (因为之前很少写3进制的状态 阅读全文
posted @ 2017-09-01 15:18 walfy 阅读(210) 评论(0) 推荐(0)
摘要:题意:求某一区间内的平衡数(指在某一数位开始,左右两边的权值相同,如4119:4*2+1*1=9*1,以1 为支点,该数是平衡数) 题解:枚举所有的支点,求和,dp【i】【j】【k】i是位数,j是支点位置,k是两端权值和,左边为正,右边为负,i为0时,k为0,那么该数就是平衡数 #include<b 阅读全文
posted @ 2017-09-01 12:28 walfy 阅读(131) 评论(0) 推荐(0)