
数学
文章平均质量分 51
Lupin123123
这个作者很懒,什么都没留下…
展开
-
Slot Machines
题目链接题目大意:求对于所有的k,数列去掉前k项后剩余部分的最小循环节p,k+p的最小值。思路:枚举k,计算a[k+1…n]的最小循环节p,维护k+p的最小值。tips:求a[k+1…n]的最小循环节p时,将数列翻转。#include<bits/stdc++.h>#define FAST ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define INF 0x3f3f3f3ftypedef long long ll;cons原创 2021-09-07 00:35:48 · 159 阅读 · 0 评论 -
Up the Strip
题目链接dp+刷表考虑用除的方法到达if[i]f[i]f[i] 对 [i×j, i×j+i−1][i\times j,\ i\times j+i-1][i×j, i×j+i−1] 都有贡献,所以可以枚举倍数,像埃氏筛一样刷。区间修改用树状数组会T,注意到查询位置单增,修改的位置均在最近的查询位置之后,所以用差分维护。总复杂度O(nlogn)O(nlogn)O(nlogn)完整代码:#include<bits/stdc++.h>#define FAST ios::sy原创 2021-08-26 22:34:51 · 160 阅读 · 0 评论 -
Binary String
题目链接题意:从一个二进制串中删除若干的字符,问最少删除几次才能使这个二进制小于所给的k。思路:贪心。优先删除1,不够再删0。注意删1要从次高位开始。cut and paste法证明:完整代码:#include<bits/stdc++.h>#define FAST ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define INF 0x3f3f3f3ftypedef long long ll;const int maxn原创 2021-08-26 16:29:50 · 777 阅读 · 0 评论 -
[Luogu] P2887 Sunscreen G
题目链接区间与点的匹配问题题目大意:有n个区间,m个点,一个点只能匹配一个区间,求最大匹配数。思路:贪心+优先队列。将点按从小到大排序,区间按左端点从小到大排序,定义一个小根堆。对于每一个点,在所有有可能与其匹配的区间中优先匹配右端点小的,因为右端点大的更可能与更大的点成功匹配。完整代码:#include<bits/stdc++.h>#define FAST ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define INF原创 2021-08-24 21:19:29 · 123 阅读 · 0 评论 -
[hdu] P7079 Pty loves lines
题目链接经典的求直接交点数的问题之前做过简化版 ,并且安利一下自己的题解如果依旧像之前一样用二维dp[i][j]表示能否达到i条直线,j个交点的情况,将面临运行超时,dp数组存不下的尴尬局面。那么考虑新的做法。考虑讲n条直线划分为若干组,每一组内的直线两两平行且这个组是极大的。设总共分成了 ppp 组,每一组的直线数为 aia_iai,那么交点数就是n(n−1)2−∑i=1kai(ai−1)2\frac{n(n-1)}{2}- \sum_{i=1}^k\frac{a_i(a_i-1)}{2}2n(原创 2021-08-20 01:23:41 · 594 阅读 · 6 评论 -
[hdu] P1466 计算直线的交点数
题目链接组合数学题,考虑递推如果要求n条直线中任意两条直线都有交点,设ana_nan为n条直线产生的交点数,那么易得 an=an−1+n−1a_n=a_{n-1}+n-1an=an−1+n−1 因为把第n条直线加入到前n-1条直线的平面时,会与这n-1条直线都构成一个交点。现在去掉“两两相交”条件,那么在加入第n条直线的时候就有可能有直线与他平行。设f(i,j)f(i,j)f(i,j)为有i条直线构成j个交点是否可行,前i-1条直线有k条与其平行。那么f(i,j)=1f(i,j)=1f(i,j)原创 2021-08-19 19:56:41 · 196 阅读 · 0 评论 -
[Luogu] P1083 [NOIP2012 提高组] 借教室(差分)
一开始用线段树做的,后来还听说能二分+差分?!这个做法真挺巧妙的。原创 2021-08-11 23:51:41 · 120 阅读 · 0 评论 -
[Luogu] P1108 低价购买
题意:求一个序列中最长下降子序列的方案数,看上去一样的方案只算一次。设f[i]表示1…i中以a[i]结尾的最大下降子序列的方案数,dp[i]表示以a[i]结尾的最大下降子序列的长度。如果是不要求把看上去一样的方案去掉,可以按如下的代码计数: for (int i=1; i<=n; i++) { if (dp[i]==1) f[i]=1; for (int j=1; j<=i-1; j++) if (a[i]<a[j] && dp[i]==dp[原创 2021-08-08 17:35:20 · 92 阅读 · 0 评论 -
[Luogu] P1627 [CQOI2009] 中位数
思路:1.将序列转化成01序列,将大于中位数的值设为1,小于中位数的值设为-1,中位数设为0。2.合法的子序列一定是包含0且何为0的一个连续子序列。然后只要用一些手段找到所有满足条件的[L,R]就行了。最原始的想法是O(n^2)的暴力枚举,居然能90分。下面附上代码片段: for (int i=1; i<=pos; i++) for (int j=pos; j<=n; j++) if ((j-i+1)&1 && sum[j]-sum[i-1]==0) a原创 2021-08-07 21:17:41 · 143 阅读 · 0 评论 -
[hdu多校] P7029 Median
题目链接首先要明确的是中位数必须在不同的集合中,只要能将剩下的数消去那么就是yes,否则是no。m个中位数把序列分成了m+1段,这m+1个集合中任意两个集合中的两个数都是可以两两消去的。那么这m+1个集合要满足什么性质才能让所有数都能消去呢?初步设想最后的情况有两种:1.所有集合都是空的2.有一个集合还有一些元素没被消去第一种情况是显然“yes”的。对于第二种情况容易证明最后还有元素没被消去的一定是包含元素最多的一个集合,要使它成立那么只能把剩下的元素放入包含比剩下的元素的最小值还要小的中位数的集原创 2021-08-06 22:50:04 · 139 阅读 · 0 评论 -
[hdu] P7025 Yes, Prime Minister
题本身不算难,但是容易错。队友wa了好几次,自己也没能幸免,所以要多模拟比赛提升coding的能力啊。下面是自己赛后整理的比赛时候的思维过程:#include<bits/stdc++.h>#define FAST ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define INF 0x3f3f3f3fusing namespace std;const int lim=3e7+5;const int maxn=7e7+5原创 2021-08-06 00:31:48 · 293 阅读 · 3 评论 -
[hdu多校]CCPC Strings
题目链接题目大意:在所有长度为n且只含有c,p的字符串集合中,计算含有不重复的字串ccpc的个数。思路:1.若允许重复,即“…ccpccpc…”的被算成两个ccpc。于是我们可以认为n-3个位置上的ccpc都对答案贡献1,可以得到共有(n−3)×2n−4(n-3)\times2^{n-4}(n−3)×2n−4个ccpc 。2.下面重点讲怎么去除重复。重复是因为出现了"ccpc/cpc", “ccpc/ccpc/cpc”…这样的字串,我发现对于一个无重叠的ccpc子串,在其后面加上cpc,他立刻就变成原创 2021-08-05 18:05:17 · 399 阅读 · 1 评论 -
[模板] 快速幂+大数乘取模(防溢出)
当模数p很大时,有溢出的风险,于是给出一个模板详细解释ll mul(ll a, ll b) //大数乘取余{ ll ans=0; while(b) { if (b&1) ans=(ans+a)%p; a=(a+a)%p; b=b>>1; } return ans;}ll fpow(ll base, ll n) //快速幂+大数乘取余{ base%=p; ll ans=1;原创 2021-07-23 02:09:48 · 586 阅读 · 0 评论 -
[hdu多校] I love permutation
题目链接这道题的本质是求解一个序列中逆序对奇偶性的问题1.初见已知bn=a*n%p,可以先求出序列b,然后归并排序或是树状数组求逆序对,然而看了p的范围之后果断放弃(这尼玛哪能存的下啊 )2.进一步思考 (罚坐2小时之后看题解得)我们得到下面的信息:(1)如果在序列中ai,aj构成一对逆序对,那么(ai-aj)和(i-j)必定异号(2)题中要求的是序列逆序对的奇偶性,不必也不太可能求出具体的逆序对数整合信息后,研究逆序对的奇偶性可以转化为研究∏aj−aij−i\prod \frac{a_j-原创 2021-07-23 01:45:37 · 487 阅读 · 3 评论