牛客
不哭的超人
愿你孤独的努力终有回报,愿你前行的路上有人相伴。
展开
-
Parenthesis
Parenthesis解题思路:线段树+前缀和。计算出前缀和,’(‘就加一,’(‘就减一。考虑三种情况,如果是s[x]==s[y]或者s[x]= =’)’&&s[y]= = ‘(’,那么就直接是yes。对于s[x]= = ‘(’&&s[y]= =’)’,判断在[x,y)的最小的前缀和-2如果<0,就是no,要不然就是yes.#include <bits/stdc++.h>using namespace std;typedef long long ll原创 2020-11-03 20:39:41 · 259 阅读 · 0 评论 -
Drop Voicing
Drop Voicing题解:多次的Invert和多次的Drop一定是可以把某个数放在指定位置的。那么求出一个序列的最长升序子序列cnt,那么就需要执行n-(多次的Invert和多次的Drop)。因为Invert可以将第一个放在最后,那么就会有n个不同下表的序列,是一个循环。#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int>P;const int inf原创 2020-08-01 10:40:49 · 206 阅读 · 1 评论 -
Fraction Construction Problem
Fraction Construction Problem参考:https://blog.csdn.net/bbbll123/article/details/107451028https://blog.csdn.net/qq_43054573/article/details/107443839#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>using namespace std;typedef long原创 2020-10-19 15:32:06 · 209 阅读 · 0 评论 -
All with Pairs
题目:All with Pairs题解:先用hash统计每一个字符串后缀总共出现了多少次。然后对每个字符串开始计算前缀,计算前缀在后缀中出现了多少,但这个时候会出现一个问题,就是有的后缀会被重复计算。比如字符串“aba”,aba的前缀是a,那么就算a的时候肯定就把"aba"的个数也计算了,所以需要用"a"的个数减去"aba"的个数。#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair&l原创 2020-07-22 20:45:39 · 192 阅读 · 0 评论 -
Harder Gcd Problem
题目:Harder Gcd Problem#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int>P;const int inf = 0x7f7f7f7f;const int N = 2e5+10;const ll mod = 1e9+7;const double PI = 3.14;int read(){ char ch=getchar();原创 2020-07-21 17:17:22 · 200 阅读 · 0 评论 -
Operation Love
题目:Operation Love题解:先遍历找出最长的一条边x1,然后再找到拇指的那条边x2。两条边三个点,判断其叉积正负即可。#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef long double lf;typedef pair<int,int>P;const int inf = 0x7f7f7f7f;const int N = 2e5+10;const ll mod原创 2020-07-20 23:13:49 · 383 阅读 · 0 评论 -
Boundary
题目:Boundary已知三点,求圆心、半径x=((y2-y1)(y3y3-y1y1+x3x3-x1x1)-(y3-y1)(y2y2-y1y1+x2x2-x1x1))/(2.0*((x3-x1)(y2-y1)-(x2-x1)(y3-y1)));y=((x2-x1)(x3x3-x1x1+y3y3-y1y1)-(x3-x1)(x2x2-x1x1+y2y2-y1y1))/(2.0*((y3-y1)(x2-x1)-(y2-y1)(x3-x1)));r=(x1-x)(x1-x+(y1-y)(y1-y);题解原创 2020-07-16 14:39:27 · 617 阅读 · 0 评论 -
统计颜色
题目:统计颜色题解:感觉这题有点类似与线段树的区间求和,只是在这题变成了或。一开始我用的bitset,但都超时或者错了,long long是2^63次方,也满足。#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int>P;const int inf = 0x7f7f7f7f;const int N = 1e5+10;const ll mod = 1e9+7原创 2020-07-10 14:21:57 · 281 阅读 · 0 评论 -
情人节的电灯泡(二维线段树)
题目:情人节的电灯泡题解:二维区间的操作,使用二维线段树。应该是线段树套线段树。第一个线段树的每个叶子节点相当于是二维数组的行,然后在叶子节点里再建立一个线段树,这个线段树放的的某一行的列元素。#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int>P;const int inf = 0x7f7f7f7f;const int N = 1e3+10;cons原创 2020-07-09 13:06:58 · 298 阅读 · 0 评论 -
牛牛与数组
题目:牛牛与数组题解:dp[i][j]表示当i个数字是j的时候,满足有多少种情况,#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int>P;const int inf = 0x7f7f7f7f;const int N = 2e5+10;const ll mod = 1e9+7;const double PI = 3.14;int read(){原创 2020-07-07 19:20:54 · 230 阅读 · 0 评论 -
被3整除的子序列
题目:被3整除的子序列题解:动态规划。1、能够整除3,那么这个数字的每位数的和一定是3的倍数2、dp[i][j]表示前i个字符,有多少个子序列%3等于j.#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int>P;const int inf = 0x7f7f7f7f;const int N = 2e5+10;const ll mod = 1e9+7;原创 2020-07-06 13:16:22 · 364 阅读 · 0 评论 -
集合操作
题目:集合操作题解:先把所有数字都放进去预处理。然后把要插入的删除,删除的插入。#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int>P;const int inf = 0x7f7f7f7f;const int N = 1e6+10;const ll mod = 1e9+7;int read(){ char ch=getchar();int原创 2020-05-25 22:38:44 · 154 阅读 · 0 评论 -
中位因数
题目:中位因数题解:找到i的倍数j,那么i和j/i就有可能是j的中位数,保证i<j/i,既然是中位数,那么i就应该所有因子左边的最大值,所以用a来维护。#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int>P;const int inf = 0x7f7f7f7f;const int N = 1e6+10;const ll mod = 1e9+7;原创 2020-05-25 01:08:56 · 411 阅读 · 0 评论 -
烦人的依赖
题目:烦人的依赖题解:用拓扑排序+优先队列。把所有入度为0的点都加入优先队列。竟然卡vector#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int>P;const int inf = 0x7f7f7f7f;const int N = 3e4+10;const int mod = 1e9+7;int read(){char ch=getchar(原创 2020-10-19 15:31:02 · 193 阅读 · 0 评论 -
序列卷积之和
题目:序列卷积之和题解:这题打表找规律,然后用前缀和。每对i*j出现了多少对。第一行相当于(a[1]*4+a[2]*3+a[3]*2+a[4]*1)*1第二行相当于(a[2]*3+a[3]*2+a[4]*1)*2第三行相当于(a[3]*2+a[4]*1)*3…#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int>P;const int inf =原创 2020-05-23 13:47:17 · 1235 阅读 · 0 评论 -
生日蛋糕
题目:生日蛋糕题解:从小往上搜索s:表示当前的表面积;v:表示当前的体积。1、对于其中一个dfs,如果当前的s大于最小的ans,则可以返回2、对于其中一个dfs,如果当前的v大于n,则也可以提前返回3、假设在第u层,此时的体积为v,表面积是s。那么就还剩n-v的体积可以使用,因为下一层的半径、高都要比这层高,所以r为min(sqrt(n-v),下一层的半径-1),h为min((u-v)/r/r,下一层的高-1),对于第u层r、h能取到的最小值都为u。4、这是一个比较难想到的。假设此时位于第u层原创 2020-05-20 23:45:40 · 373 阅读 · 0 评论 -
王国
题目:王国题解:找到每种颜色深度最大的点,然后再和颜色一样的点的距离计算。。使用最近公共祖先。/*┏┓ ┏┓*┏┛┻━━━┛┻┓*┃ ┃ *┃ ━ ┃*┃ ┳┛ ┗┳ ┃*┃ ┃*┃ ┻ ┃*┃ ┃*┗━┓ ┏━┛* ┃ ┃神兽保佑* ┃ ┃代码无BUG!* ┃ ┗━━━┓* ┃ ...原创 2020-10-19 15:30:57 · 229 阅读 · 0 评论 -
智乃与无意义的题目
题目:智乃与无意义的题目题解::开四个线段树。今晚忘记有比赛了/*┏┓ ┏┓*┏┛┻━━━┛┻┓*┃ ┃ *┃ ━ ┃*┃ ┳┛ ┗┳ ┃*┃ ┃*┃ ┻ ┃*┃ ┃*┗━┓ ┏━┛* ┃ ┃神兽保佑* ┃ ┃代码无BUG!* ┃ ┗━━━┓* ┃ ┣┓* ┃ ...原创 2020-05-02 16:03:29 · 257 阅读 · 0 评论 -
小雨坐地铁
题目:小雨坐地铁题解:学到一个新知识,分层图最短路,建立m+1层图,有一层的n个点都是虚点,另外的n层进行连接。#include <bits/stdc++.h>#include <cstdlib>using namespace std;typedef long long ll;typedef pair<ll,int>P;const int N = ...原创 2020-04-22 19:06:55 · 235 阅读 · 0 评论 -
旅旅旅游
题目:旅旅旅游题解:分别求出以1为起点的最短距离,和以n为起点的最短距离。然后对每条边进行判断,判断这条边是否为最短路径的边。最后再把剩下的边判断一下就好了。#include <bits/stdc++.h>#include <cstdlib>using namespace std;typedef long long ll;typedef pair<ll,i...原创 2020-10-19 15:30:30 · 157 阅读 · 0 评论 -
牛妹吃豆子
题目:牛妹吃豆子题解:这道题用的二维差分和二维前缀和。前缀和与差分#include <bits/stdc++.h>#include <cstdlib>using namespace std;typedef long long ll;typedef pair<int,int>P;const int N = 2005+10;const ll mod...原创 2020-04-19 20:25:26 · 321 阅读 · 0 评论 -
相似的字串
题目:相似的字串题解:这个答案满足单调性,所以可以用二分写。用Hash来判断是否有相同的子串,对于其中可能有重叠的部分,用map将字串相同的进行比较。#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int>P;const int N = 2e5+1...原创 2020-10-19 15:30:25 · 283 阅读 · 0 评论 -
牛牛的Link Power II
题目:牛牛的Link Power II题解:假设ans是没有操作时的能量。cnt[x]:代表1的个数sum[x]:代表一段区间字符为1的下标和对于q = 1, ans = ans+abs(poscnt[1~pos-1]-sum[1 ~ pos-1])ans = ans+abs(poscnt[pos+1 ~ n]-sum[pos+1 ~ n])对于q = 2, ans = ans-abs...原创 2020-02-09 00:08:12 · 243 阅读 · 0 评论 -
做计数
题目:做计数题解:这题我都考虑的差不多了,就是i*j<=n忘记考虑了。唉~#include <map>#include <set>#include <stack>#include <queue>#include <vector>#include <cmath>#include <cstdio>...原创 2020-02-06 20:19:41 · 150 阅读 · 0 评论 -
C、Xor Path(LCA模板)
题目:C、Xor Path题解:先求根节点到每个结点的异或值,用pre[x],和pre[y]来表示,假设求结点x和结点y之间最短路径的异或值,pre[x]和pre[y]之间一定会有重合的部分,但是pre[x]^pre[y],就把相同的给抵消了。但是他们相同的一定会有离他们最近的公共结点 ,需要把这个点保存下来,就用这个点的异或值与他父亲的异或值相异或,就把这个点给保存了。需要灵活运用倍增。...原创 2020-10-19 15:29:51 · 235 阅读 · 0 评论 -
Jelly
题目:Jelly题解:运用广度优先搜索。#include <iostream>#include <string>#include <cstdio>#include <queue>using namespace std;typedef long long ll;const ll mod = 20010905;const int N =...原创 2020-01-20 14:47:30 · 309 阅读 · 0 评论 -
I I love you
题目:I love you简单DP。分析做的每一道DP.不同的子序列 解法1#include<iostream>#include<string>using namespace std;typedef long long ll;const ll mod = 20010905;ll f[10]; //此时的f数组所对应的相当与iloveyou = t,/...原创 2020-01-19 23:16:10 · 293 阅读 · 0 评论 -
数字组合
题目:数字组合题解:01背包模板。#include <bits/stdc++.h>using namespace std;const int N = 1e4+10;int a[N];int dp[N];int main(){ int n,m; scanf("%d%d",&n,&m); for(int i = 1;i <= ...原创 2020-01-18 15:49:28 · 198 阅读 · 0 评论 -
Days passing
题目:Days passing题解:运用到了费马小定理。这道题求的其实算是(k+nm)%7,就可以变成k%7+nm%7,φ§ = 6, p = 7.n%p != 0 ,说明gcd(n,p)==1,那么就可以套用nm%φ§, m%φ§ ==0,这是只要直接加1就好了。n%p==0,那么肯定还在他本身。#include <bits/stdc++.h>using name...原创 2020-01-12 18:25:13 · 138 阅读 · 0 评论 -
Kuangyeye's Game
题目:Kuangyeye’s Game题解:判断点是否共线,是有数学公式的#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int>P;const int inf = 0x7FFFFFFF;const int N = 50005;int A,...原创 2020-01-12 15:06:59 · 186 阅读 · 0 评论 -
The GCD of Fibonacci Numbers(斐波那契数列的最大公约数定理)
题目:The GCD of Fibonacci Numbers题解:这题利用到了斐波那契数列的最大公约数定理gcd(F(m),F(n))=F(gcd(m,n))还有个公式当m>n时,有f[m] = f[n+1]*f[m-n]+f[m-n-1]*f[n];#include <bits/stdc++.h>using namespace std;typedef long ...原创 2020-01-11 22:47:00 · 500 阅读 · 0 评论 -
I 「木」揠苗助长
题目:I 「木」揠苗助长总结:这一题是个模拟题,细心一点就好了。我写的代码有点烦。#include <bits/stdc++.h>using namespace std;const int N = 2e5+10;map<int,int>vis1;map<int,int>vis2;int a[N],b[N],c[N],d[N];int ans1[...原创 2019-11-28 15:33:08 · 175 阅读 · 0 评论 -
H 「土」巨石滚滚
题目:H 「土」巨石滚滚总结:先按照每一个的回血量从大到小,因为这时候当然是要优先加大的,在cnt>0的时候要按照a从小到大,因为这时候只有减小的,才能保证是大的。对于cnt<=0,这时候说明无论怎样都是掉血的,那我就应该优先选择回血快的,所以b从大到小。#include <bits/stdc++.h>using namespace std;typedef long...原创 2019-11-27 16:40:52 · 242 阅读 · 0 评论 -
E-「火」烈火燎原
题目:E-「火」烈火燎原总结:挺简单的,还想了老半天。如果知道一个树每个点的度有多少,那么就知道了其子树边有多少条。而其子树的边等于其子树的子树的顶点。#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 100005;int n;ll degree[N];ll ...原创 2019-11-26 19:48:48 · 207 阅读 · 0 评论 -
能天使的愿望
题目:A 能天使的愿望总结:分组背包的模板题。#include <bits/stdc++.h>using namespace std;const int N = 805;int n,m,k,y;int a[N],p[N][N],f[N];int main(){ freopen("out.txt","r",stdin); scanf("%d%d%d%...原创 2019-11-23 13:46:36 · 244 阅读 · 0 评论