- 博客(29)
- 收藏
- 关注
原创 2022-08-26 QLUACM暑假训练5 I题题解
中位数和平均数都有01串的性质,所以我们可以先二分答案mid,找到有哪些数大于等于mid设为1,哪些数小于mid设为-1,然后找哪些区间有至少n/2个正数即转变成了和大于等于0的区间有多少个,那么自然想到要用前缀和处理一下,这样可以o1内查询一段区间的和。然后就转变成了一个经典的二位偏序的题目——即x...
2022-08-31 17:30:07
299
原创 莫队-CF-617-E
Problem - E - Codeforces 莫队板题,唯一难点是知道如何处理区间异或 题目中说是区间,则可以转化为前缀和的形式。 令Si=a1 xor a2 xor .... xor ai; 则 al xor a(l+1) xor a(l+2) ... xor ar = Sr xor S(l-1) 然后每次询问就可转化为在 [ l-1,r ] 之间有多少个Si 和 Sj (i<=j) 使得Si xor Sj = k; 又因为Si xor Sj = k 即 Si xor k = Sj
2022-05-23 22:11:45
129
原创 CF-B. Modulo Sum
Problem - 577B - Codeforces 鸽巢原理,如果n大于1000的时候则说明必然会使加上一个数和再加上另一个数后模完m是相同的,那么就一定存在一种情况是模m等于0的,所以当n大于1000时必定有解,否则n<=1000只需要跑背包求方案数即可。 #include<bits/stdc++.h> #define PII pair<int,int> #define PLL pair<long long,long long> #define fi f
2022-05-17 21:00:17
136
原创 CF-B. Swaps
Problem - 1573B - Codeforces 1.因为a和b两个数列没有相同的元素,所以必须让a的第一个元素的字典序小于b的第一个元素的字典序。 2.将b进行桶排序,然后从大到小进行取min,这样的话,就代表>=这个数的数出现最早的下标是多少。 3.i-1是a数组往前移动的步数,b[a[i]+1]-1是比a[i]大的数移动到最前面的最小步数 #include<bits/stdc++.h> using namespace std; const int N=2e5+10;
2022-05-17 15:45:43
142
原创 树上两点距离为k的点对个数-D. Distance in Tree
Problem - 161D - Codeforces经典树形dp #include<bits/stdc++.h> using namespace std; const int N=2e3+10; long long f[N][N];//以i为根的子树中离i距离为j的点的个数 int n,k; vector<int> ve[N]; long long res=0; void dfs(int u,int fa){ f[u][0]=1;//自身距离...
2022-05-15 03:56:28
471
原创 求矩形内以(0,0)为左上坐标第k大/小子矩形面积大小
求以(0,0)为左上坐标第k大子矩形面积大小A-An Easy Problem_GDCPC广东省大学生程序设计竞赛(正式赛) (nowcoder.com) 时间复杂度: #include<bits/stdc++.h> using namespace std; #define fi first #define se second int main(){ long long n,m,k; scanf("%lld %lld %lld",&n,&m,&k.
2022-05-15 03:30:22
327
原创 CF-478/C Table Decorations
Problem - 478C - Codeforces 经典二杀一问题 #include<bits/stdc++.h> using namespace std; int main(){ long long s[3]={}; for(int i=0;i<3;i++) scanf("%lld",&s[i]); sort(s,s+3); if(s[2]>=(s[0]+s[1])*2){ printf("%lld\n",s[0]+s[1]); } else{
2022-05-15 01:46:19
157
原创 CF380C Sereja and Brackets
tr数组存四个值,L,R,left,right; left代表[L,R]区间内不合法的左括号数,right代表[L,R]区间内不合法的右括号数。 叶节点如果是'(',则left=1,right=1; 叶节点如果是')',则left=0,right=1; void pushup(int u){ tr[u].left=tr[u<<1].left+tr[u<<1|1].left-min(tr[u<<1].left,tr[u<<1|1].right); t
2022-05-13 01:24:31
170
原创 P1982 小朋友的数字
P1982 [NOIP2013 普及组] 小朋友的数字 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这里感谢题解区老哥的题解,这里附上他这道题题解的链接题解 P1982 【小朋友的数字】 - Kaizyn 的博客 - 洛谷博客 (luogu.com.cn) (折磨我一个小时的题) #include<bits/stdc++.h> using namespace std; const int N=1e6+10; const long long LNF=0x3f3f3f3
2022-05-12 13:24:54
528
原创 求一段 [ l , r ] 区间小于 m 的元素个数-划分树做法
#include<bits/stdc++.h> using namespace std; const int N=1e5+10; int a,b,c; int sorted[N]; struct node{ int num[N]; int toleft[N]; }; node s[32]; int n,m; void build(int l,int r,int deep){ if(l==r) return ; int mid=(l+r)>>1; int key=sort.
2022-05-11 14:20:04
103
原创 P1137 旅行计划 - 拓扑排序+dp
P1137 旅行计划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc++.h> using namespace std; const int N=2e5+10; int n,m,tot; int h[N],e[N],ne[N],d[N]; int top[N],idx=0; int f[N]; void add(int a,int b){ e[tot]=b; ne[tot]=h[a]; h[a]=tot++; } void top
2022-05-11 03:20:16
248
原创 最大子段和问题
FIrst:无限制最大子段和问题 时间复杂度: #include<bits/stdc++.h> using namespace std; const int N=1e5+10; long long f[N]; int main(){ int n; scanf("%d",&n); long long res=-0x3f3f3f3f3f3f3f3f; for(int i=1;i<=n;i++){ long long x; scanf("%lld",&x);
2022-05-09 18:54:28
443
原创 数据结构-划分树
划分树:解决静态区间第K值问题 #include<bits/stdc++.h> using namespace std; const int N=200005,M=20; int n,m; #define mid ((le+ri)>>1) #define lson le,mid,dep+1 #define rson mid+1,ri,dep+1 struct Node{ int num[N],toleft[N]; }; Node t[M]; int sorted[N]; voi
2022-05-08 20:16:22
385
原创 金明的预算方案-有依赖的背包问题
P1064 [NOIP2006 提高组] 金明的预算方案 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc++.h> using namespace std; const int N=2e5+10; int n,m; int f[N],g[N],v[N],w[N],team[N]; int main(){ scanf("%d %d",&n,&m); for(int i=1;i<=m;i++){ int a,
2022-05-03 23:16:17
144
原创 河科院第一届程序设计比赛-G-最强对手矩阵
G-最强对手矩阵_“九韶杯”河科院程序设计协会第一届程序设计竞赛 (nowcoder.com) 如果利用二维前缀和的话则需要枚举上下左右边界,是n^2*m^2的时间复杂度 而如果利用一维前缀和,然后枚举左右端点,行数枚举的话则是n^2*m的时间复杂度 然后防止出现n过大的情况要把n和m在n大的情况下调换 #include<bits/stdc++.h> using namespace std; const int INF=0x3f3f3f3f; int main(){ int
2022-04-26 14:05:21
98
原创 河科院第一届程序设计比赛-H-友谊纽带
H-友谊纽带_“九韶杯”河科院程序设计协会第一届程序设计竞赛 (nowcoder.com) 先用并查集确定是否可以一定有解,然后再用bfs找到最短最大距离 #include<bits/stdc++.h> using namespace std; const int N=1e5+10; #define PII pair<int,int> #define fi first #define se second int n,m; vector<int> ve[N]; int
2022-04-26 13:32:01
149
原创 河科院第一届程序设计比赛-D-数列重组
D-数列重组_“九韶杯”河科院程序设计协会第一届程序设计竞赛 (nowcoder.com) #include<bits/stdc++.h> using namespace std; int s[11]={-0x3f3f3f3f,2,3,3,3,5,6,6,7,7,8}; int main(){ long long res=0; do{ int flag=0,cnt=0; for(int i=2;i<=10;i++){
2022-04-26 02:49:30
98
原创 kuangbin打卡-搜索-棋盘问题
1114. 棋盘问题 - AcWing题库 简单dfs,精髓在于记录已使用多少棋子,然后分两种方式进行递归,实现可以跳跃行来枚举分布种类。 #include<bits/stdc++.h> using namespace std; const int N=10; int n,m; long long res; int f[N]; char g[N][N]; void dfs(int u,int k){ if(k==m){ res++; return
2022-04-22 12:36:24
216
原创 小A的第一份工作
#include<bits/stdc++.h> using namespace std; #define PLL pair<long long,long long> #define fi first #define se second int main() { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); stack<P.
2022-04-22 01:32:30
87
原创 小A的出差
#include<bits/stdc++.h> using namespace std; #define PII pair<int,int> #define fi first #define se second const int N=1e6+10; const int mod=1e9+7; const int INF=0x3f3f3f3f; int n,m,k,start,ed; long long x; vector<PII> ve[N]; long long go.
2022-04-22 01:26:05
200
原创 P3078 [USACO13MAR]Poker Hands S
P3078 [USACO13MAR]Poker Hands S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc++.h> using namespace std; const int N=1e5+10; int n; long long s[N]; //该题可以看作是填坑,填左边的坑的时候顺便把右边的坑填了 //如果把左边的坑填了右边的坑还没有填完那就需要花费额外的代价把右边的坑填了 int main(){ scanf("%d",&a
2022-04-21 01:34:57
577
原创 P1007 独木桥
P1007 独木桥 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc++.h> using namespace std; int main(){ int d,n; cin>>d>>n; int maxx=0,minn=0; for(int i=1;i<=n;i++){ int x; scanf("%d",&x); maxx=max(maxx,max(d-x+1,x)); mi
2022-04-20 17:53:55
101
原创 长沙学院-G-小圆前辈的数组
G-小圆前辈的数组_长沙学院2021校赛(重现赛) (nowcoder.com) #include<bits/stdc++.h> using namespace std; const int N=1e5+10; long long s[N]; vector<long long> ve[N]; int main(){ long long n,k,z; scanf("%lld %lld %lld",&n,&k,&z); for(lon
2022-04-18 11:44:51
79
原创 P1892 [BOI2003]团伙
P1892 [BOI2003]团伙 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc++.h> using namespace std; const int N=5e3+10; int p[N+N]; int find(int x){ if(p[x]!=x) return p[x]=find(p[x]); return p[x]; } //若a和b是敌人,b和c是敌人,将a与b+n相连,b+n与c相连,则实现a和c相连 //用二倍数
2022-04-17 20:17:01
276
原创 P2835 刻录光盘
P2835 刻录光盘 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc++.h> using namespace std; const int N=1e3+10; int p[N],s[N]; int num[N][N]; int find(int x){ //找到x的根并实现路径压缩 if(p[x]!=x) return p[x]=find(p[x]); return p[x]; } int main(){ int n; .
2022-04-17 18:35:42
490
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅