- 博客(43)
- 收藏
- 关注
原创 TZOJ 7929 Matrix Power Series 矩阵快速幂
【代码】TZOJ 7929 Matrix Power Series 矩阵快速幂。
2023-08-15 19:47:16
259
原创 牛客多校题解 | I Non-Puzzle: Segment Pair 扫描线
可以从每一个点开始考虑 如果前面的点没有任何可行的方案,那么新点就可以作为左端点,对答案的贡献为。向后扫描的过程中,如果新的点有增加,答案的贡献若为。对区间,要求每对区间恰好选一个使得选出来的。个区间有交集,问有多少方案数。
2023-08-15 13:13:52
219
原创 TZOJ 3326: Barn Repair 线性DP
以及牛所在牛棚的编号stall_number(1 <= stall_number <= S),计算拦住所有有牛的牛棚所需木板的最小总长度。他的新木料供应商将会供应给他任意他想要长度的木板,但是供应商只能够提供少量的木板。在一个夜黑风高、下着暴风雨的夜晚,farmer John的牛棚的屋顶、门都被吹飞了。所有的牛棚都有相同的宽度。DP转移:dp[i][k] = min (dp[i][k],dp[j][k-1]+a[i]-[j]+1)DP状态:dp[i][k] : 对第i头牛的时候用了k个木板的最小值。
2023-08-12 19:37:22
264
原创 TZOJ 3100: 女生寝室的围墙 凸包
凸包模板题:在平面上能包含所有给定点的最小凸多边形叫做凸包。实际上可以理解为用一个橡皮筋包含住所有给定点的形态。凸包用最小的周长围住了给定的所有点。如果一个凹多边形围住了所有的点,它的周长一定不是最小,如下图。根据三角不等式,凸多边形在周长上一定是最优的图来自oiwiki。
2023-08-10 23:04:45
185
原创 TZOJ 曹冲养猪 (扩展)中国剩余定理
同时 p 与 q 的通解也可以获得:p = x + (k * b) / gcd(a,b) ,q = y + (k * a) / gcd(a,b)将原来的 a = b1 , b = b2 , x = p , y = q , c = a2 - a1。得到:新的 a3 = p * b1 + a1 ,b3 = lcm(b1,b2)。化简:因为:b1 * b2 /gcd(b1,b2) =lcm(b1,b2)所以:M = k * lcm(b1,b2) + p * b1 + a1。
2023-08-10 19:09:39
223
原创 树链剖分模板
#include<bits/stdc++.h>using namespace std;typedef long long LL;typedef long double dl;const LL N =1e5+5;int n,m,r,p;int a[N],h[N],e[N*2],ne[N*2],num;int dep[N],f[N],son[N],siz[N];int idx[N],top[N],b[N],cnt;void add(int x,int y){ e[num]
2022-03-18 11:50:42
432
3
原创 浅谈st表
st表的概念st表可以用于处理静态(不修改)的rmq问题(区间最值问题)O(logn)预处理 ,O(1)查询。是一种操作简单的数据结构。st表的实现st表通过倍增,区间dp来实现。st表预处理:void init(){ for(int i=1;i<=lg[n];i++) { for(int j=1;j+(1<<i)-1<=n;j++) { st[j][i]=max(st[j][i-1],st[j+(1<
2022-03-15 11:27:34
1571
原创 直线的个数(set的应用)
注意点在于set要重载所有元素#include<bits/stdc++.h>using namespace std;typedef long long LL;typedef pair<LL,LL>pii;const int N=2e3+50;vector<pii>G[N];LL dis[N];struct node{ LL a,b,c; bool operator < (const node &t)const{ .
2022-01-17 21:06:36
108
原创 LeetCode 1388. 3N块披萨 线性dp
题解:第一步:转化题意:如果我们要取在数组中的一个数。那么它左右相邻的数都没办法取。以此类推,取的第一个数就与第二数不是相邻的,那么题意就转变为:在长度为3*n的数组取n个不相邻的数的最大值。第二步:考虑dp做法。dp[i][j][0]表示:选第i个数时已经选了j个数了。(第三维表示是否选择了第一位)那么可以从dp[j][i][0]转移过来。那么转移方程:dp[i][k][1]=max(dp[j][k-1][1]+slices[i],dp[i][k][1]);dp[i][k][0]=ma.
2022-01-05 20:30:25
248
原创 TZOJ 6455: 学学学 状压dp
题目描述:题解:难道是上一道的状压dp给了我自信?难道还是我真的有做dp的天赋?(逃这里我们直接枚举(1<<17)种情况就好了。如果当前状态满足。那我们就在这个状态的基础上减掉一种算法,然后检测这种状态是否满足。如果满足,我们就可以直接转移了。#include<bits/stdc++.h>using namespace std;const int N=1e5+5;typedef long long LL;int n,m;int f[20][20];LL dp[
2022-01-04 18:38:00
264
原创 LeetCode 1349. 参加考试的最大学生数 状压dp
题目描述:题解:模拟周赛的时候卡住了,就直接去看题解去了(hh看了题解其实很简单:枚举每一列dp[i][j],i表示第i行,j表示第i行的每一种状态。判断第j种是否成立。如果成立就枚举它前面一行的k的状态。如果满足条件,后面一排的人看不到前一排的人的答案,那我们就可以愉快的状态转移了:dp[i][j]=max(dp[i-1][k]+num,dp[i][j])num表示这一行的人数。class Solution {public: bool check(int k,vector&l
2022-01-04 18:31:28
362
原创 Leetcode 5970. 参加会议的最多员工数 强连通分量
题目描述:题解:比赛的时候看出来跟强连通分量有关了。庆幸自己硬着头皮写了强连通分量了,图论确实练的不多。我们两两对应建图。可以发现有两种情况:1.当强连通分量里面元素个数为2的时候,我们可以找这个这两个元素的反向最长链。因为有两个人相互喜欢的话,它可以无限延伸出去。我们dfs找两条最长链相加就行。同时所有答案可以想加,因为已经成为闭环了。2.当强连通大于2时,桌子就只能坐下这个强连通分量的所有人了。并且只能做一个了。AC代码:class Solution {public:
2022-01-02 13:28:22
406
原创 台州学院ACM集训队月赛(元旦场)
比赛地址戳这里1001 : 数学题:求极限:1002 : maomeng的成就题解:对于某一个物品i,我们可以选择他的第一个成就,或者选择第二个成就,又或者不选,这样我们就可以使用dfs,来遍历所有情况。时间复杂度为O(3^10).#include<bits/stdc++.h>using namespace std;const int N=10+5,mod=1e9+7;typedef long long LL;int tt[N],m[N],T[N],M[N];int n
2022-01-01 16:20:05
927
原创 acwing 周赛31 4202. 穿过圆 bitset优化
题目描述:题解:因为两个点之间可以任意走,然后我们只用穿过包含该点的圆,那么答案就是就是两个点被包含的圆减点两个点都被包围的圆。那如何快速求呢。这里我们用到了bitset,在第j个点的第i位为1,表示这个点被第j个圆包围,这样我们就可以就两个bitset做与操作快速求出他们共同包含的点了。然后预处理他们各自包含几个圆相减即可。#include<bits/stdc++.h>using namespace std;const int N=1e4+5;typedef long long
2021-12-30 21:16:17
576
原创 AtCoder Beginner Contest 233 F - Swap and Sort(并查集+dfs)
题目描述:我们有一个关于(1—N)的全排列P;现在给出m次操作。每次操作包含x和y。该操作可以交换Px与Py的值。现在问你是否可以通过最多执行 5×105次操作对 P 进行排序操作可以交换顺序。如果可能,请给出一个这样的操作序列。 否则输出-1。题解:我们将交换操作抽象成图,这样我们根据并查集判断i与p[i]是否在同一联通分量之中,如果所有i与对应p[i]都可以在同一联通分量找到,我们就开始匹配。先找到叶子节点,因为只有先将叶子节点固定了,我们才能够操作他的父节点。那用两次dfs就可以了。
2021-12-30 21:01:30
433
原创 (AtCoder Beginner Contest 232) E - Rook Path dp+组合数
题目大意:给定一个 h*w(0<w,h<1e9) 的棋盘,现在有一个象棋棋子“车”在(x1,y1)现在你能执行k步走到( x2 , y2 ),请问有几种走法。题解用dp来处理行和列,一种是在当前行,另一种是不在当前行,即分别为dp[1],dp[0];那么如果我在i步内能到达即是dp[1][i],不能到就是dp[0][i]这样就可以写出转移方程:dp[i][1]=dp[i-1][0];//注意dp[i][1]不也可以由dp[i-1][1]转移得到,因为移动0步不算一次操作。dp[i
2021-12-20 21:16:37
536
1
原创 (AtCoder Beginner Contest 229) E - Graph Destruction 并查集+思维
题面:样例输入:6 71 21 41 52 42 33 53 6样例输出:123210题意:给你一个无向图,n个点,m条边。点的编号1—n。现在按照1-n顺序每次删掉一个点 请问删完后还剩多少个连通块。题解:比赛的时候本来一直在想用tarjan求出每个点相连的桥。然后减一下。后来越想越麻烦。其实不用这么求。我们只用从后往前遍历删除的点,因为输出是从前往后输出,所以在遍历到第i个点时,它前面的i-1个点是不需要考虑的。我们就可以用并查集,从后往前加点进入图中,如
2021-11-28 14:41:46
343
1
原创 牛客练习赛 91 D 监狱逃亡 树状数组+离散化
题目描述:题解:代码:#include<bits/stdc++.h>using namespace std;typedef long long LL;const int mod=1000000007,N=5e5+5;int n;LL sum[5][N];LL a[N],b[N];vector<LL>vec;LL tr[N],m;int findx(LL x){ return lower_bound(vec.begin(), vec.end(),
2021-11-13 14:18:10
515
原创 牛客练习赛90 题解
C 盾与战锤D 妄想集合样例输入:5 51 10 2 6 2Ask 1 3Quant 1 2 5Ask 1 3Quant 1 4 5Ask 4 5样例输出:NOYESYES主要是如何
2021-11-13 14:08:07
254
原创 (AtCoder Beginner Contest 225) E - 7
题意:给你n给点,第i个点坐标为(xi,yi)则由这个点扩展成一个“7”字形三个点分别为(xi-1,yi),(xi,yi),(xi,yi-1)。现在想要求出删去几个七字形剩下的最多完全可视( wholly visible)的“7”字形有几个?何为完全可视:将三点中的两点与原点连边;如下图所示:这两个七字形就不为完全可视。输入样例:31 12 11 2输出样例:2题解:这题主要思路是贪心将七字形两条斜边的斜率分别定为左边界和右边界将其按照左端点排序,经行类似区间覆盖的贪心
2021-11-01 11:49:48
171
原创 数字染色 容斥原理
原题链接:https://ac.nowcoder.com/acm/contest/20278/I这道题本来是周常训练时碰到的。听周队说是容斥原理,想以后学了数学在做,碰巧刚刚学了容斥,就来把这题给A了。(听说用莫比乌斯反演也可以做下回再补吧)题目:输出样例1:42 3 6 2输出样例1:9输出说明:共有 9 个方案:{1},{2},{3},{4},{1,3},{2,3},{3,4},{1,4},{1,3,4}。其中以上为所选数的下标。#include<bits/stdc
2021-10-29 12:03:13
197
原创 牛客 小w的糖果 差分数组
题目描述:输入描述:输出描述:示例1:输入:410 11 110 12 210 13 310 31 12 23 3输出:1 1 1 1 1 1 1 1 1 10 1 2 3 4 5 6 7 8 90 0 1 4 9 16 25 36 49 641 2 4 8 14 22 32 44 58 74```![请添加图片描述](https://img-blog.csdnimg.cn/0b76e61933b445c9bb70635e02b71244.jpg?x-oss
2021-10-28 11:22:11
92
原创 TZOJ 2644 青蛙的约会 扩展欧几里得
题解:代码:#include<algorithm>#include<iostream>#include<cstdio>#include<cstring>using namespace std;typedef long long LL;LL exgcd(LL a,LL b,LL &x,LL &y){ if(b==0) { x=1;y=0; return a; } .
2021-09-26 14:27:43
107
1
原创 tzoj 官方竞赛集训队个人赛(五)题解
E:背包问题题解:因为m有范围。我们发现所有物品的体积范围最大不超过1050000。说明物品的体积最大超过容量55000.所以我们对剩余体积(remin)进行反向背包计算出至少大于remin的最小价值。#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N=6e4+50;int main(){ int t; scanf("%d",&t); while(t--) {
2021-09-22 13:11:59
795
1
原创 高斯消元模板 TZOJ 5817: 球形空间产生器
关于高斯消元:时间复杂度O(n^3)利用增广矩阵可以求出线性方程。代码:#include<bits/stdc++.h>using namespace std;const int N = 105;const double eps = 1e-6;double a[N][N];int n;int gauss(){ int r,c; for(r=1,c=1;c<=n;c++) { int t=r; for(int i=r
2021-09-16 16:21:04
130
1
原创 TZOJ 6619 网格 卡特兰数+高精度
关于卡特兰数:定义:对于一个由n个1,和0组成的序列,并且满足每一位之前的0的个数必定大于等于1的个数。这些序列的总数我们称之为卡特兰数。建模 (图片来源于https://www.acwing.com/solution/content/46130/)我们将0表示为向左走,1表示为向右走。通过图中我们可以发现 终点(n,n)一共有C(2n,n)中。而违规路线经过红线反转必然经过点(n-1,n+1),那么违规路线的总数即为C(2n,n-1),那么合法的路线就为C(2n,n)-C(2n,n-1)。
2021-09-15 15:09:11
318
1
原创 TZOJ 车的放置 dp递推+组合数
题目:题解:(一):dp递推:1.dp[i][j]的状态表示:第i行一共有j个棋子的数目;2.转移方程就为:dp[i][j]=dp[i-1][j-1]*(k-j+1)+dp[i-1][j]。前一排j-1的个数乘以这一排的方案数(k-j+1)再加上前一层j的个数。注意:一般要从右往左遍历比较好。#include<bits/stdc++.h>using namespace std;const int mod = 100003; int f[2005][2005];in
2021-09-14 15:06:04
146
原创 TZOJ 6612 方程的解 组合数+快速幂+递推+高精度
题目描述:题解:1.利用快速幂取模将g(x)给求出来。2.分析a1,a2,a3…ak。发现可以通过隔板法做:一、我们先建立以下模型:当k=3,g(x)=7时。就是在以上七个球之间添加两块板。那所有的情况就是:C(k−1,n−1)。答案最大可以达到:C(100,1000)。因为没有取模所以需要高精度加法和递推式:C(r,n) = C(r-1,n-1)+C(r,n-1)。代码:#include<bits/stdc++.h>using namespace std;typ
2021-09-13 21:35:14
124
原创 acwing 903. 昂贵的聘礼 有约束的最短路
题目:年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了,于是便向酋长去求亲。酋长要他用 10000 个金币作为聘礼才答应把女儿嫁给他。探险家拿不出这么多金币,便请求酋长降低要求。酋长说:”嗯,如果你能够替我弄到大祭司的皮袄,我可以只要 8000 金币。如果你能够弄来他的水晶球,那么只要 5000 金币就行了。”探险家就跑到大祭司那里,向他要求皮袄或水晶球,大祭司要他用金币来换,或者替他弄来其他的东西,他可以降低价格。探险家于是又跑到其他地方,其他人也提出了类似的要求,或者直接用金
2021-09-11 09:58:46
308
1
原创 TZOJ 4763: 线性表公共元素 list链表+模拟
题目:题解:本题直接用list模拟就完事了。本人对list不是很熟练导致re两发。代码:#include<bits/stdc++.h>using namespace std;int main(){ int n; while(~scanf("%d",&n)) { list<int>l; int m; scanf("%d",&m); for(int i=1;i<=m;i++) { int k; scanf("%
2021-09-09 08:17:33
133
2
原创 Codeforces 1366D - Two Divisors 素数筛+gcd的构造
题目:题意:如果n的两个因数d1,d2,能构造gcd(d1+d2,n)=1。就输出d1和d2。如果不行就输出两个-1。题解:代码:#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N=1e7+5;int f[N],p[N],ans;int a[N/10],b[N/10];void init(){ for(int i=2;i<N;i++) { if(!f[i
2021-09-08 21:05:00
101
原创 TZOJ 5160: Yifan and LCM bitset筛素数+初等数论
题目描述:题意:求lcm(1,2,3…n)。题解:以上结论其实挺好证明得到。因为一个数不是一个质数的n次方那么将这个数分解质因数,他的素因子一定包含于前面的lcm。代码:因为n的数特别大。普通的欧拉筛素数没法满足,所以就需要用bitset来储存bool数组。#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N=1e8+5;const int M=6e6;bitset&l
2021-09-07 20:46:22
119
原创 TZOJ 7034: 竹取飞翔 ~ Lunatic Princess 并查集+数学。
题目:题解:这道题比赛的时候没看,主要还是因为对集合求所有子集和不是很了解。看了题解才知道 sum=(2^n-1)*(集合中数的和).。然后就很简单了,用并查集维护祖孙节点就好了。唯一的坑点就是原始的数据可能是负数,不能直接取模需要加上mod后取模。代码:#include<iostream>#include<cstdio>using namespace std;typedef long long LL;const int mod=1e9+7;const in
2021-09-07 13:56:41
104
原创 TZOJ 5463: 学习之数论 欧拉筛+分解质因数
题目:题解:第一眼看到后就想到了分解质因数。先把正整数K给分解质因数了。然后利用约数和他的次数,求出最大的n但这样还不够(可能是crq在折腾负载平衡的问题),算法t了。于是我在求质因数的时候用了欧拉筛把复杂度降了下来,最后ac代码也只跑了287ms。难道欧拉分解质因数这么快的吗?代码:#include<bits/stdc++.h>using namespace std;typedef long long LL;typedef pair<LL,int>pii;co
2021-09-07 13:41:56
242
原创 Codeforces Round #741 (Div. 2) B - Scenes From a Memory 暴力打表
B - Scenes From a Memory题目:题解题目的意思就是给你一串数,要求计算删掉多少数可以成为一个合数。一开始看不出什么规律。于是我进行了暴力打表找规律。暴力代码:#include<bits/stdc++.h>using namespace std;#define max 100bool f=0;bool judge(int num){ for(int i=2;i*i<=num;i++) { if(num%i==0) { retur
2021-09-06 08:04:45
170
原创 hdu 7105 Power Sum 字符串构造
题目描述:题解:比赛中一直在dfs,bfs,打表找规律。一直没做出。比赛后看了别人代码,直接恍然大悟。我们可以发现一下规律:代码:#include<bits/stdc++.h>using namespace std;int main(){ int t; scanf("%d",&t); while(t--) { string ss; int n; scanf("%d",&n);
2021-08-29 11:40:38
130
原创 TZOJ 5159 类kmp或字符串哈希
TZOJ 5159: Yuchang ans Zixiang’s Magic## 题目地址:http://www.tzcoder.cn/acmhome/problemdetail.do?method=showdetail&id=5159题目描述:需要上面数字和下面数字每一个拼起来一样。例如样例:解题:解法一;使用kmp算法:先预处理他们的两两之间的差值:发现模式串和匹配串如果互为相反数就可以匹配。代码:#include<bits/stdc++.h>using
2021-08-24 17:38:58
135
1
原创 2021-08-09 LCA基础
前言:crq开的基础图论里LCA没学过,所以就打算趁机学一下。学习目标:LCA专题训练学习内容:1、 TZOJ 5701: 数据结构实验:最近公共祖先2、 TZOJ 6579: 祖孙询问3、 TZOJ 6578: 点的距离24、 TZOJ 6532: 次小生成树5、 TZOJ 6577: 暗的连锁题目一:没啥好说的倍增LCA模板题这里我用的是dfs构建倍增数组,实际上用bfs构建更安全,不容易爆栈。#include <bits/stdc++.h>using names
2021-08-09 20:57:25
129
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人