- 博客(29)
- 收藏
- 关注
原创 P1469 找筷子
这道题一眼看上去很简单,但是看到空间限制为 444 Mb的时候,就不能用普通的方法来解决了。就算你开一个10710^7107的数组你就MLE了。但是考虑到异或的性质:异或满足交换律和结合律,而且相同两个数异或起来就是000,000异或任何一个数都是这个数,所以如果我们把所有的数都异或起来,那么如果长度为aaa的筷子是成双的,那么两个aaa异或就是000,那么最后的结果就是落单的筷子的长度#include<bits/stdc++.h>using namespace std;int ans
2020-10-25 12:00:01 189
原创 二分图
匈牙利#include<bits/stdc++.h>using namespace std;int b,n,t;const int M=209;int v[M],g[M][M],m[M]; int dfs(int x){ for(int i=1;i<=b;i++) { if(g[x][i] || v[i])continue; v[i]=1; if(dfs(m[i]) || !m[i]) {
2020-10-07 13:28:33 80
原创 LCA
LCA#include<bits/stdc++.h>using namespace std;inline long long read(){ long long num=0;int z=1;char c=getchar(); if(c=='-') z=-1; while((c<'0'||c>'9')&&c!='-') c=getchar(); if(c=='-') z=-1,c=getchar(); while(c>
2020-10-07 13:25:21 95
原创 最小生成树
kruskalint get(int x){ if(x==fa[x]) return fa[x]; return fa[x]=get(fa[x]);}sort(e+1,e+m+1);for(int i=1;i<=n;i++)fa[i]=i;for(int i=1;i<=m;i++){ int x=get(e[i].x); int y=get(e[i].y); if(x==y) continue; fa[x]=y; ans+=e[i].z;}primvo
2020-10-07 13:22:31 74
原创 最短路
dijkstravoid dijkstra(){ memset(d,0x3f,sizeof(d)); memset(v,0,sizeof(v)); d[1]=0; q.push(make_pair(0,1)); while(q.sise()) { int x=q.top(); if(v[x])continue; v[x]=1; for(int i=head[x];i;i=e[i].next) { int y=e[i].to; if(d[y]>d[x]+e
2020-10-07 13:13:55 56
原创 高精
加#include<bits/stdc++.h>using namespace std;char a[501],b[501];int a1[501],b1[501];int c[501],c1;int main(){ int r; scanf("%s",a); scanf("%s",b); int n=strlen(a); int m=strlen(b); for(int i=0;i<n;i++)a1[n-i]=a[i]-48; for(int i=0;i<
2020-10-04 17:16:02 80
原创 一些杂题
汉诺塔#include<bits/stdc++.h>using namespace std;void hanoi(int n,char a,char b,char c){ if(n==1){ cout<<n<<' '<<a<<" "<<c<<endl; } else{ hanoi(n-1,a,c,b); cout<<n<<" "<<a<<" "<
2020-10-04 17:07:14 79
原创 隔板法
隔板法题型解析首先大家应该明确运用“隔板法”必须同时满足三个条件才可以:①题目中要分的元素没有任何差别,必须完全相同;②所分的元素要求全部分完,不许存在剩余的情况;③每个人都必须分到一个元素,不可以出现有人分不到的情况。其次隔板法之所以不好掌握,就是因为这类题型有三种不同的变形,每一种变形都有其快速的解法,大家一定要好好理解,并熟练的应用到解题中去。1.“至少分配一个”型【例1】将7个完全相同的球分给4个盒子,要求每个盒子至少得到1个球,一共有几种分配方法?A.14
2020-10-04 11:19:56 2951
原创 int 溢出
溢出会变成溢出值和最大可表示范围值的差值。当整数的数据zhi大小超出了可以表示的范围,dao而程序中又没有做数值范围的检查时,这个整型变量所输出的值将发生紊乱,且不是预期的运行结果。当最大值加上 1 时,结果反而变成表示范围中最小的值;当最大值加上 2 时,结果变成表示范围中次小的值,这就是int数据类型的溢出。这个情形会出现一个循环。扩展资料:若是想避免这种情况的发生,在程序中就必须加上数值范围的检查功能,或者使用较大的表示范围的数据类型,如长整型。可以在该表达式中的任一常量后加上大写的“L”,或
2020-10-04 10:53:59 2758
原创 day 2 数学基础 &数据结构1
好吧,实际上好多我也不会质数bool is_prime(int n){ if(n<2) return flase; for(int i=2;i<=sqrt(n);i++) if(n%i==0) return flase; return true; } 质数筛基本上用欧式晒void prime(int n){ memset(v,0,sizeof(v)); for(int i=2;i<=n;i++) { if(v[i]
2020-10-03 10:19:19 83
原创 2020-10-01
1.DFSAcWing 165. 小猫爬山挺经典水的DFS;题目#include<bits/stdc++.h>using namespace std;inline long long read(){ long long num=0;int z=1;char c=getchar(); if(c=='-') z=-1; while((c<'0'||c>'9')&&c!='-') c=getchar(); if(c=='-') z
2020-10-01 17:26:49 820
原创 聪明的质监员 noiip 提高
聪明的质监员算法:前缀和+二分题目链接吐槽一下,这个质检员不会被开除么。。。。这个题很明显的二分枚举,但是还有一个前缀和有点坑人。这题题其实点不多,就两个关键点:第一:二分的判断。可以看到:在W取0时,所有的区间内的矿石都可以选上,而在W大于最大的质量时,所有的矿石都选不上。然后简单算一下就发现:W越大,矿石选的越少,W越小,矿石选的越多。满足二分单调性所以,随着W增大,Y值减小;所以:二分的判断条件出来了:当Y>s时,需要增大WW来减小YY,从
2020-09-13 09:44:29 111
原创 2600 城镇规划 (并查集 set)
2600 城镇规划 (并查集 set)小A最近在玩《都市:天际线》这款游戏,他在不断地建设着自己的城市(比如说修路盖房这种)。但是一个没有贸易的城市是没有灵魂的,所以小A的城市中有许许多多的贸易来往,给这个城市带来源源不断的资金。然而小A为了展现自己高超的游戏技巧,给自己打了一个增加游戏难度的mod,使得贸易的难度陡然上升。在这个mod中,城市中的每一条路都有一个颜色C,假设贸易经过的路径序列为Ci(i=1,2,…,n),那么需要满足C_(2*k-1)=C_(2*k) (2*k<...
2020-09-12 21:53:17 129
原创 1901 大逃杀 (树形dp 背包) 罗方炜 信息学luoOJ 8月21日
1901 大逃杀 (树形dp 背包)罗方炜信息学luoOJ8月21日自从Y 君退役之后,她就迷上了吃鸡,于是她决定出一道吃鸡的题。Y 君将地图上的所有地点标号为1 到n,地图中有n-1 条双向道路连接这些点,通过一条双向道路需要一定时间,保证从任意一个点可以通过道路到达地图上的所有点。有些点上可能有资源,Y 君到达一个有资源的点后,可以选择获取资源来使自己的武力值增加wi,也可以选择不获取资源。如果Y 君获取了一个点上的资源,这个点上的资源就会消失,获取资源不需要时间。有些点上可能..
2020-09-12 21:51:13 338 1
原创 2020-09-12
1729 旅行 (树形dp 二次扫描与换根)原创罗方炜信息学luoOJ5天前小C上周末和他可爱的同学小A一起去X湖玩。X湖景区一共有n个景点,这些景点由n-1条观光道连接着,从每个景点开始都可以通过观光道直接或间接地走到其他所有的景点。小C带着小A从1号景点开始游玩。游览完第一个景点后,先由小C决定下一个游览的景点,他们一起走去那个景点玩。接下来,他们轮流决定他们下一步去哪个景点玩。他们不会选择已经走过的景点,因为重复游览一个景点是无趣的。当他们无法选择下一个景点时,他们就结束旅程。...
2020-09-12 21:01:53 182
原创 区间DP
石子合并(环)两倍#include <bits/stdc++.h>using namespace std;const int maxn = 205;int N, a[maxn], s[maxn], dp1[maxn][maxn], dp2[maxn][maxn];int main(){ scanf("%d", &N); for (int i = 1; i <= N; i++) scanf("%d", &a[i]); for (int
2020-08-15 14:01:37 67
原创 差分约束系统
AcWing 362. 区间差分约束系统班子;注意:边多开几倍;边的方向;spfa与Dijkstra的区别; if (d[y] < d[x] + Leng[i]) { d[y] = d[x] + Leng[i]; if (!v[y]) { v[y] = 1; q.push(y); } }单元最长路; d[]d[]d[]初始化为0x3f3f3f3f0x3f3f3f3f0x3f3f3f3f#include<bits/stdc++.h>
2020-08-15 10:18:17 82
原创 最短路
通行线路分层图最短路:注意:双向变两倍空间,分层图点平方倍空间#include<bits/stdc++.h>using namespace std;inline long long read(){ long long num=0;int z=1;char c=getchar(); if(c=='-') z=-1; while((c<'0'||c>'9')&&c!='-') c=getchar(); if(c=='-') z=-
2020-08-14 10:54:53 68
原创 逆序对
奇数码问题其实是将两个矩阵转化成数列,看逆序对奇偶性是否相等。#include<bits/stdc++.h>using namespace std;inline long long read(){ long long num=0;int z=1;char c=getchar(); if(c=='-') z=-1; while((c<'0'||c>'9')&&c!='-') c=getchar(); if(c=='-') z=-1
2020-08-14 10:09:35 93
原创 Huffman树
合并果子#include<bits/stdc++.h>using namespace std;inline long long read(){ long long num=0;int z=1;char c=getchar(); if(c=='-') z=-1; while((c<'0'||c>'9')&&c!='-') c=getchar(); if(c=='-') z=-1,c=getchar(); while(c>
2020-08-14 09:20:32 54
原创 基环树+树形DP
概述:即带环的树形DP(没有上司的舞会)AcWing 359. 创世纪#include <cstdio>#include <iostream>#include <algorithm>using namespace std;const int N = 1000006, INF = 0x3f3f3f3f;int n, fa[N], t, k, f[N][2], s[N][2], ans;int Head[N], Edge[N<<1], Next[
2020-08-13 20:08:29 249
原创 质数
质数距离l,r,都非常大,但l−rl-rl−r很小所以晒出1至sqrt(r)1至sqrt(r)1至sqrt(r)的质数,再用倍数法求解注意:质数为iii时在数组中村i−li-li−l,不然数组会爆#include <cstdio>#include <vector>#include <cstring>#include <iostream>using namespace std;const int N = 100006, L = 1000006,
2020-08-13 16:35:54 98
原创 trie
144. 最长异或值路径思路:求dn到根节点的异或和,存到字典树中求最大疑惑和即可。因为x,y,以上的异或和会消掉。#include <bits/stdc++.h>using namespace std;const int u=100010;#define fir(i,a,b) for(int i=a;i<=b;i++)#define fic(i,a,b) for(int i=a;i>=b;i--)int ver[2*u],edge[2*u],Next[2*u],hea
2020-08-13 09:38:34 65
原创 并查集
1249 Problem B 谁在说谎(luo)思路:扩展域遇到相反的否定类的条件,用扩展域;有n个小朋友,编号1到n,老师将他们分成两队,但分完后小朋友又乱跑了,不知道谁分在哪队,于是他求助很多小机器人,编号1到m,这些机器人会按顺序提示一些信息。提示的信息是这样的: a b, 表示小朋友a和小朋友b不在同一队。但是这些机器人偶尔会撒谎,老师就来请求你帮忙,看看哪个机器人最先撒谎。撒谎的规则是这样的,只要当前机器人说的信息与之前所有信息不冲突,就不算撒谎,如果冲突了,就算撒谎了。#inc
2020-08-11 09:33:13 143
原创 堆
1.逃出金字塔(escape)#include<bits/stdc++.h>using namespace std;inline long long read(){ long long num=0;int z=1;char c=getchar(); if(c=='-') z=-1; while((c<'0'||c>'9')&&c!='-') c=getchar(); if(c=='-') z=-1,c=getchar();
2020-08-10 18:38:04 82
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人