- 博客(10)
- 收藏
- 关注
原创 Forest Program HDU - 6736 dfs找无向图所有环(长度)
题意:给定一个仙人掌,删去一些边可以让它变成一个森林(一棵树也是森林),求方案数。 n≤300000,m≤500000思路:对于一个有n条边的环,可以删去1、2…n条边,则共有C(1,N) + C(1,2) + … + C(1,N)=2^n-1 种方案;对于不成环的边(若有p条),每一条可删可不删,即两种选择,则有2^p种方案那么最终的答案就是每个环的方案数相乘,再乘上非成环的边的方案数所以问题现在转变为找无向图中所有的环(长度),和非成环的边数;代码:#include <cstdio
2020-09-30 21:14:43 440
原创 EOJ Monthly 2020.9 B. 健康监测计划 叶子节点的个数(每层)
官方题解:#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <iostream>#include <algorithm>#include <vector>#include <queue>using namespace std;typedef long long ll;vecto...
2020-09-30 19:36:37 91
原创 EOJ Monthly 2020.9 C. 最小表示
eoj官方题解:写的时候并没有采用他后半段动态规划的方法。直接遍历字符串,先把连续的1 变为1 0 … 0 -1这样的形式再把 -1 和 1 合并#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <iostream>#include <algorithm>using namespace std;ty..
2020-09-27 20:37:02 143
原创 Discrete Centrifugal Jumps 单调栈+dp
#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;int n;int h[300010],u[300010],d[3000
2020-09-22 21:34:31 108
原创 Zigzags CodeForces - 1400D 思维
题意给出一组数:寻找四元组的个数(i,j,k,l)其中a[i]=a[k],并且a[j]=a[l]且 1 <= i < j < k < l <= n ;思路四个数 分别为 a1 b1 a2 b2 其中 a1=a2 b1=b2先枚举b1的位置(从 i = 2开始,因为前面必须有数当a1)然后从 j = i+1位置开始遍历到j=n,找与b1相等的数若num[ i ] = num[ j ],则代表找到了 b2,那么此时更新答案ans那么怎么更新答案呢我们在
2020-09-09 20:12:05 194
原创 Good Subarrays 思维
题意若子数组的元素之和等于元素个数,那么这个子数组就为好子数组。那么给你一个子数组序列字符串,判断该序列有多少个好子数组。思路长度为len的子段,数字和为len那么平均每一位上是1将每个数 -1之后 ,得前缀和那么 长度为len的子段,数字和为len 可转化为 长度为len的子段,数字和为0首先 对于前缀和a[pos]已经为0的(l=1 r=pos) 直接加入答案里其次 若a[pos1]=a[pos2](pos2>pos1)那么 a[pos2]-a[pos1]=0 即在
2020-09-08 20:29:26 132
原创 Zhu and 772002 HDU - 5833 高斯消元
分解质因数完全平方数分析https://www.jianshu.com/p/888f2c2b31bc注意系数摆放顺序素数 2 3 54: 2 0 06: 1 1 010: 1 0 115: 0 1 1每个数对应的次数序列 依次列摆,得矩阵2 1 1 0 0...
2020-09-04 21:40:52 257
原创 164. 可达性统计 二进制压缩+拓扑
#include<bits/stdc++.h>using namespace std;const int N=30010;int n,m,d[N],ts[N],w=0;vector<int>ed[N];bitset<N>f[N];void tops(){ queue<int>q; for(int i=1;i<=n;i++) { if(d[i]==0)q.push(i); } while
2020-09-01 21:28:10 96
原创 2020牛客暑期多校训练营(第二场)Boundary
题意: 给你n个点(n<=2000),问你最多有多少个点共圆且这个圆经过原点(0,0)。三点确定一个圆(不共线)n很小,直接枚举两个点#include<bits/stdc++.h>using namespace std;const int N=2010;const int inf=0x3f3f3f3f;int n;double ax[N],ay[N];map<pair<double,double>,int> w;///共线的三点构不成一个圆//
2020-09-01 19:47:54 46
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人