摘要: 感觉是6题中最难的一题,其实这题是一个二合一: 第一问:给定平面上若干点和k个关键点,关键点覆盖一个45°倾斜的正方形范围r,求有多少点被至少一个关键点覆盖。这个可以曼哈顿转切比雪夫距离,然后再扫描线求解,复杂度O(nlogn) 第二问:求最少和最多有多少次擦肩而过。显然每个交点都可以做对向交换,这 阅读全文
posted @ 2019-05-13 21:46 hfctf0210 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 出这种麻将题有意思吗? 乍看很难实则很水,就是麻将式DP,想必大家很熟悉了吧。首先把“国士无双”和“七对子”两种牌型判掉,然后观察牌胡的形式,发现每多一张牌实际上就是把1个面子变成1个杠子,然后可以直接DP啦!f[i][j][k][p][q]表示到第i种牌型,(i-2,i-1,i)有j个,(i-1, 阅读全文
posted @ 2019-05-12 17:12 hfctf0210 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 首先看到与或,很显然想到按照位拆分运算。然后就变成了0/1矩阵,要使矩阵在当前位与为1,则矩阵全为1,如果是或为1,则是矩阵不全为0,然后求全为0/1的矩阵个数即可。记录c[i][j]表示以a[i][j]在该位向上0/1的长度。然后对于每一行,单调栈求解即可。 #include<bits/stdc+ 阅读全文
posted @ 2019-05-12 17:07 hfctf0210 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 要想让一个位置作为最小循环,其必须是最小后缀,然后一个字符串的最小后缀不超过O(logn)个,于是维护备选集合即可。 然而要在O(n)复杂度求解,需要求出原串后缀与原串的LCP长度,需要用Z-algorithm。而此时由于备选后缀存在前缀关系,比较时只需用到每个后缀与原串的LCP #include< 阅读全文
posted @ 2019-05-12 17:05 hfctf0210 阅读(567) 评论(0) 推荐(0) 编辑
摘要: AB 签到(A是a-b problem就不放code了) #include<bits/stdc++.h> using namespace std; int r,g,b,n,ans; int main() { cin>>r>>g>>b>>n; for(int i=0;i*r<=n;i++) for(i 阅读全文
posted @ 2019-05-11 22:45 hfctf0210 阅读(316) 评论(2) 推荐(1) 编辑
摘要: O(nlogn)的做法十分显然,有三种可以做到O(nlogn)的:1、最容易的想法:把串扩展成两倍,然后跑一遍SA求后缀数组。2、求后缀同样也可以用SAM去求解,用map存一下。3、最暴力的方法:直接二分+hash比较第一位不同的。 其实这题想要让我们用最小表示法求解,然而我不会就来学一下。很容易发 阅读全文
posted @ 2019-05-11 12:57 hfctf0210 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 设第i个人在t时刻生/死为(x,0/1,t),然后显然能够连上(x,0,t)->(x,0,t-1),(x,1,t)->(x,1,t+1),然后对于每个限制,用朴素的2-SAT连边即可。 但这样的点数达到了O(nT),其实有一种方法可以只把限制的边连接建图,点数为4m,这样可能会被卡常。 有没有更优秀 阅读全文
posted @ 2019-05-11 10:40 hfctf0210 阅读(466) 评论(0) 推荐(1) 编辑
摘要: A 签到,然而手残WA了一发,不过加上50分名次不变。 #include<bits/stdc++.h> using namespace std; int n,m; int main() { scanf("%d%d",&n,&m); m=n-m; if(m==n)printf("1"); else i 阅读全文
posted @ 2019-05-10 08:03 hfctf0210 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 据说原数据可以让复杂度不满的暴力O(Tn^2)过掉……O(Tn^2)方法类似于codeforces一场div2的E题 有一种比较好的方法:每次找出原图G中度最小的点加入q,然后将相邻的点加入新图G'。这显然能够得到一个最大的独立集。而p可以在维护度最小的点最大这一过程中,把G的所有点加入集合p。因为 阅读全文
posted @ 2019-05-09 13:06 hfctf0210 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 首先可以把问题转化一下:m堆石子,一共石子数不超过(n-m)颗,每次可以将一堆中一些石子推向前一堆,无法操作则失败,问有多少种方法使得先手必胜? 然后这个显然是个阶梯Nim,然后有这样的结论:奇数层异或和为0。具体证明:参考这篇博客,当然不是我写的。如果不知道结论,里面有例题POJ1704可以做一下 阅读全文
posted @ 2019-05-09 11:36 hfctf0210 阅读(617) 评论(0) 推荐(0) 编辑