- 博客(17)
- 收藏
- 关注
原创 函数关于某直线对称点的性质
我们可以利用点和直线的对称性来推导函数关于直线的对称性。对称,因此有:(1) 直线。这就是函数关于直线对称的公式。(2) 根据对称性,对称点。上的函数值应该等于原点。现在我们要求得对称点。因此,对称点的横坐标。
2023-04-23 11:03:15
1905
原创 线段树维护单增序列方案数 CF1567E
题目大意给你一个数组a1...ana_1...a_na1...an ,现在有两种操作:用yyy更新axa_xax询问l...rl...rl...r区间内,有多少非递减子序列思路官方题解极其反人类。。。这是一个经典题的变形,线段树维护区间最大连续和,思路也基本是一样的用线段树维护每个区间最大递增前缀数量、最大递增后缀数量、以及方案数然后查询的时候,合并左右子树,这里重载运算符(注释写的很清楚)代码// https://codeforces.com/contest/1567/pro
2021-09-06 15:08:28
278
原创 CF1562E
题目大意定义一个拓展序列 为S1,S1S2,S1...Sn,S2,S2...Sn,...,Sn−1,Sn−1Sn,SnS_1, S_1S_2, S_1...S_n,S_2, S_2...S_n ,..., S_{n-1}, S_{n-1}S_n,S_nS1,S1S2,S1...Sn,S2,S2...Sn,...,Sn−1,Sn−1Sn,Sn要找最长递增子序列思路因为n≤5000n \leq 5000n≤5000, 所以可以考虑O(n2)O(n^2)O(n2) 做法,由于比较字
2021-09-01 23:53:31
126
原创 CF1529E
传送门[大佬视频讲解](【算法题解】Codeforces Round #722 (Div. 2) 二营长的意大利炮会旋转_哔哩哔哩_bilibili)题目大意有两张图共享n个节点可以给u,vu,vu,v结点加边,如果同时满足:在S的树中,u/vu/vu/v是另一个的祖先在K的树中,u/vu/vu/v不是另一个的祖先求最大的团思路条件一:节点都在从1出发的链上条件二:两两不是祖先关系在第二棵树上不是很好处理,所以我们从第一颗树上跑dfs,边跑边选择一些节点,这些节点要满足在根节点到当
2021-08-31 18:48:33
172
原创 牛客多校9 Cells
算法标签LGV引理、NTT思路因为要求不相交的方案数,所以容易想到LGV引理矩阵形式M(i,j)=E(ai,bj)M(i,j)=E(a_i,b_j)M(i,j)=E(ai,bj),代表的是aia_iai到bjb_jbj 可走的路径的权值之积的和,计数问题权值位1,故M(i,j)M(i,j)M(i,j)代表从aia_iai到bjb_jbj的方案数从(0,ai)(0,a_i)(0,ai)到(i,0)(i,0)(i,0)横坐标要走iii个步,纵坐标要走aia_iai步所以移动到A(i
2021-08-15 05:31:18
141
原创 牛客多校9 A Math Challenge
算法标签类欧的几何意义,等幂求和,拉格朗日插值法,伯努利数思路矩形点权和,∑i=0nip∑j=1kjq\sum_{i=0}^ni^p\sum_{j=1}^kj^q∑i=0nip∑j=1kjq 两个独立的求和相乘,等幂求和,自然数幂,经典做法,多项式插值,公式法,差分法等等 O(p)O(p)O(p)直角梯形的点权和因为递归子问题时候,发生了平移,所以子问题点权和合原问题点权和并不相等,这时注意到f(i,j)=ipjqf(i,j)=i^pj^qf(i,j)=ipjq 本质是一个二元函数,故我
2021-08-15 04:20:24
302
原创 Educational Codeforces Round 111 (Rated for Div. 2)
C - Manhattan Subarrays题目大意给你一个字串,让你找出连续子串中满足任意三点满足d(p,r)!=d(p,q)+d(q,r),启用pqr为b[i], b[j], b[k],d为曼哈顿距离思路如果j在i,k两个点围成的矩形中,则满足d(p,r)=d(p,q)+d(q,r),即单调递增/减时满足,d(p,r)=d(p,q)+d(q,r)很容易证明,不能有超过三个非严格单调的子序列,由抽屉原理易知,发现这样子序列最多是四个点,接下来暴力就好了,时间复杂度为O(n)。代码#in
2021-07-15 01:03:47
186
3
原创 Codeforces Round #731 (Div. 3)
D - Co-growing Sequence题目大意给你一个序列x,让你寻找一个最小的序列y,使得x[i] ^= y[i],x[i] & x[i + 1] = x[i]思路二进制表示下a[i]的第k位为1,则a[i+1]第k位也必须为1,且维护一个当前最大值x。这样的话,如果a[i+1]的第k位为0,则按位取反后,~a[i+1]的第k位为1,此时x & ~a[i + 1]的第k位就为1,根据二进制的加法法则,可知需要加上的数tmp便为x & ~a[i + 1]。然后再更
2021-07-11 01:23:47
216
2
原创 牛客13253
牛客13253传送门思路:简单模拟 + kmp此外,本题也可以用s.find()函数【if (s.find(t) != -1)】#include <iostream>#include <string>#include <algorithm>#include <cstring>using namespace std;const int N = 1e6;int ne[N];// s是长文本,p 是模板串,n是s的长度,m是p的长度
2021-06-15 14:23:44
94
原创 AtCoder Regular Contest 122 B.Insurance
AtCoder Regular Contest 122 B.Insurance传送门题目大意:你能预知第二天会发生 nnn 场灾祸,其中每场灾祸会让你损失 AiA_iAi 元,现在你可以花 xxx 元钱买一份保险,这样下来对于每一件灾祸,你所有损失的钱将会变成 x+a[i]−min(Ai,2∗x)x + a[i] - min (A_i, 2 * x)x+a[i]−min(Ai,2∗x) 元,求所有事件最小损失钱数的平均值。思路:分析以上问题,我们简化出如下公式Sum=Nx−∑i(Ai−min
2021-06-13 00:44:41
235
原创 【线性dp】AtCoder Regular Contest 122 A.Many Formulae.
A - Many Formulae传送门题目大意:给你n个数字,进行 + 或 - 的操作,其中 - 操作不能连续进行两次或两次以上,求所有可能情况的和思路:dp[i][0] 表示以 +a[i] 结尾的和,cnt[i][1] 表示以 -a[i] 结尾和cnt[i][0] 表示以 +a[i] 结尾的个数,cnt[i][1] 表示以 -a[i] 结尾的个数由此可得{dp[i][0]=(dp[i−1][0]+dp[i−1][1])+(cnt[i−1][0]+cnt[i−1][1])×aidp[i][
2021-06-12 23:29:44
228
原创 Codeforces Round #725 (Div. 3) 题解
Codeforces Round #725 (Div. 3)A - Stone Game传送门思路:思维#include <iostream>#include <algorithm> using namespace std; const int N = 500; int a[N]; int main (){ int t; cin >> t; while (t --) { int n, maxx =
2021-06-11 01:37:18
310
1
原创 【平衡二叉树】D. Playoff Tournament
D. Playoff Tournament题意:有2^k个队伍参加一场比赛,队伍之间按序号两两比赛给你一个字串s,代表每场比赛的胜负条件,满足当s[i] 为0时,下标小的队伍获胜当s[i] 为1时,下标大的队伍获胜当s[i] 为?时,两支队伍队伍都可能获胜定义f(x) 为按照当前字串s的比赛获胜方式,有多少可能的胜者现给q次查询,每次查询给出一个下标p代表修改的下标,一个字符c代表将s[p] 修改为c请你输出每次修改后,f(x) 的值由题意可知,该题需要我们维护一个二叉堆,然后利用动态
2021-06-07 18:45:20
674
原创 Educational Codeforces Round 110 (Rated for Div. 2) 题解
Educational Codeforces Round 110 (Rated for Div. 2) 题解C - Unstable String题意:给你一个带有'1','0','?'的字符串,,其中'?'可代替'1'或'0',求满足任意相邻两个字符不相等的子串个数的最大值。传送门拿到题就能很清楚的感觉到这是一个线性dp问题只要计算每一位对答案ans的贡献即可dp[i][j] 表示,当进行到第i位时,当前位为j时所贡献的方案数这里选用倒序循环防止越界贡献是什么呢,现假设有一字串S如下S
2021-06-05 02:22:09
891
原创 关于Polacode一个神奇的小bug(不能截图)
关于Polacode一个神奇的小bug今天在做笔记截图的时候,用Polacode截代码图片,发现死活截不了#include <iostream>#include <cstring>using namespace std;const int N = 5000;char s[N];int main (){ int i, j; while (cin.getline (s, N)) { int len = strlen (s);
2021-02-19 00:36:57
1240
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人