- 博客(41)
- 资源 (1)
- 收藏
- 关注
原创 c++区间问题大全
给定 n 个区间 [li,ri],要求合并所有有交集的区间。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。例如:[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。输入格式第一行包含整数 n。接下来 n 行,每行包含两个整数 l 和 r。输出格式共一行,包含一个整数,表示合并区间完成后的区间个数。数据范围输入样例:51 22 45 67 87 9输出样例:3。
2022-09-30 19:28:24
1850
原创 c++区间dp
其实没什么好说的,多练些题就好了。设有 N(N≤300)N(N \le 300)N(N≤300) 堆石子排成一排,其编号为 1,2,3,⋯ ,N1,2,3,\cdots,N1,2,3,⋯,N。每堆石子有一定的质量 mi(mi≤1000)m_i(m_i \le 1000)mi(mi≤1000)。现在要将这 NNN 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻。合并时由于选择的顺序不同,合并的总代价也不相同。试找出一种合理的方法,使总
2022-08-14 20:51:52
791
原创 c++最小生成树prim堆优化
众所周知,prim求最小生成树跟dijkstra不堆优化十分相像,那么堆优化了一定也很相像。于是无敌的我发明了prim堆优化(也许不是第一个发明的)
2022-08-11 07:39:21
232
原创 c++线段树
如题,已知一个数列,你需要进行下面两种操作:第一行包含两个整数 n,mn, mn,m,分别表示该数列数字的个数和操作的总个数。第二行包含 nnn 个用空格分隔的整数,其中第 iii 个数字表示数列第 iii 项的初始值。接下来 mmm 行每行包含 333 或 444 个整数,表示一个操作,具体如下:输出包含若干行整数,即为所有操作 2 的结果。样例输出 #1提示对于 30%30\%30% 的数据:n≤8n \le 8n≤8,m≤10m \le 10m≤10。对于 70%70\%70% 的数据:n≤
2022-07-09 20:54:56
299
原创 c++对拍(考场必备)
在考场上你不能肯定自己的代码正确,你可以写一个暴力程序,与你的代码进行对拍,以验证你的代码的正确性。(显然暴力程序不能写错)1.首先,你要将你准备提交评测的程序,名为sol.cpp。将改程序从cin.in中读取输入数据,并将答案输出到sol.out中2.准备你的暴力的程序,名为bf.cpp。将改程序从cin.in中读取输入数据,并将答案输出到bf.out中3.写一个随机生成程序的代码,名为make.cpp,将随机数据输出到cin.in中。4.你现在要写一个脚本,循环运行:运行make.exe,运行so
2022-07-09 20:44:43
1104
原创 c++线段树求逆序对
(https://www.luogu.com.cn/problem/P1908)猫猫 TOM 和小老鼠 JERRY 最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。最近,TOM 老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定义的:对于给定的一段正整数序列,逆序对就是序列中 ai>aja_i>a_jai>aj 且 i...
2022-07-05 19:19:40
189
原创 c++KMP
题目描述给出两个字符串 s_1s1和 s_2s2,若 s_1s1的区间 [l, r][l,r] 子串与 s_2s2完全相同,则称 s_2s2在 s_1s1中出现了,其出现位置为 ll。现在请你求出 s_2s2在 s_1s1中所有出现的位置。定义一个字符串 ss 的 border 为 ss 的一个非 ss 本身的子串 tt,满足 tt 既是 ss 的前缀,又是 ss 的后缀。对于 s_2s2,你还需要求出对于其每个前缀 s’s′
2022-05-15 09:48:24
159
原创 c++快读快写
快读inline int read () { int s = 0, f = 1; char ch = getchar (); while (ch < '0' || ch > '9') { if (ch == '-') f = -1; ch = getchar (); } while (ch >= '0' && ch <= '9') { s = s * 10 + ch - '0'; ch = getchar (); } return
2022-04-28 15:38:04
1093
原创 c++房间问题(dfs)
题目描述同学们来到了传说中的大理皇宫,看着皇宫外的平面图,大家都想知道大理皇宫到底有多少个房间?其中最大的房间有多大?由于大理皇宫非常大,同学们在雪山上玩得太累了,都点不清房间的数目了,这时聪明的小s同学想到了一个好主意,她说我们把平面图拍下来带回去让小朋友们编个程序数吧!这个主意得到了大家的一致同意,现在你的任务是帮助小s去数一数房间的数目和最大的房间的大小。而且小s在回来的飞机上还想出了一个更难的问题,她想拆掉一堵墙来制造一个更大的房间,如果你能解决这个难题,小s将会额外给你一件奖品。皇宫的平面
2022-04-11 15:01:55
942
原创 c++倍增(快速幂)(矩阵快速幂)(LCA)(ST表求RMQ)
快速幂举个例子:2 ^ 10 = 2 ^ 5 * 2 ^ 5 = (2 ^ 2 * 2 ^ 2 * 2) * (2 ^ 2 * 2 ^ 2 * 2) = …代码奉上#include<bits/stdc++.h>#define LL long long#define PP pair<int, int>using namespace std;LL a, b, mod, ans = 1;int main () { ios::sync_with_stdio(0); c
2022-03-25 13:24:31
1997
原创 c++缺省源
缺省源是个好东西,它会在你新建一个源代码是插入制定的代码,设置教学:就好了现在给大家推荐另一套很好用的缺省源#include<bits/stdc++.h>#define LL long long#define PP pair<int, int>using namespace std;/*struct Edge { int next; int to; int w;} edge[];int cnt;int head[];void add (in
2022-02-25 20:35:52
2358
3
原创 c++单调队列P3512 [POI2010]PIL-Pilots
原题网址:P3512#include<bits/stdc++.h>using namespace std;const int N = 3e6 + 10;int a[N];int ddd[N];//单调队列最大值int ddx[N];//单调队列最小值int n, k;int len;int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> k >> n; for
2022-02-21 20:43:05
494
原创 c++前缀和
1 2 3 4 5 6 7 8 9这样一个序列的前缀和是1 3 6 10 15 21 36 45很简单,可以直接得出公式d表示前缀和数组,a表示原数组d[i] = d[i - 1] + a[i];前缀和可以快速求出某以区间的值如:就上面的那个数据,你想求a[2, 5]这个区间里的和,可以用前缀和d[5] - d[1]证明a[2, 5]这个区间里的和是a[2] + a[3] + a[4] + a[5]而d[5] = a[1] + a[2] + a[3] + a[4] + a[5]d[1
2022-02-14 11:28:12
1007
2
原创 树状数组C++
思路没什么好说的直接上模版P3374:#include<bits/stdc++.h>using namespace std;const int N = 5e5 + 10;int n, m;int a[N];int s[N];int LLLOOOWWWBBBIIITTT (int x) { return x & (-x);}void Jia (int x, int y) { for (; x <= n; x += LLLOOOWWWBBBIIITTT (x
2022-02-10 19:01:08
501
原创 归并排序c++
总的说,每次分一半来做,就是二分#include<bits/stdc++.h>using namespace std;const int N = 5e5 + 10;long long a[N], n;long long b[N];void GuiBingPaiXu (int l, int r) { if (l >= r) return; int mid = (l + r) >> 1; GuiBingPaiXu (l, mid); GuiBingPaiXu
2022-02-10 15:15:27
544
原创 c++最短路
dijkstra:#include<bits/stdc++.h>#define For(i, a, b) for (int i = a; i <= b; i++)using namespace std;typedef pair<int, int> PP;const int N = 1e5 + 10;int n, m, k;int daan[N];//答案bool f[N];//存这个点是否扫过vector <PP> a[N];//存权值和到达的点
2022-02-10 13:34:47
978
原创 乱七八糟的小技巧(2)
众所周知,如果你想要使用文件,那么你要是用freopen具体用法:freopen("输入文件名.in","r",stdin);freopen("文件输出名.out","w",stdout);
2022-01-25 08:02:20
433
1
原创 二分查找(c++)
呵,提到查找一个数,肯定有很多人会说:“啊,暴力啊。”说的不错,暴力是可以的...for (int i = 1; i <= n; i++) if (a[i] == k) { cout << "YES" << endl; return 0; }cout << "NO" << endl;...但是,很明显的缺点:费时O(n^2)所以,我们需要一个更牛叉的办法:二分查找int Find (int l, int r, int k)
2022-01-23 15:59:56
391
原创 乱七八糟的c++小技巧(1)
1.o2优化#pragma GCC optimize(2)2.快读快写ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
2022-01-22 14:07:24
421
转载 MC(c++)转载
#include<bits/stdc++.h>#include<time.h>#include<conio.h>#include<Windows.h>using namespace std;string name,gname,wqm="手",hjm="空";long long gly,hjnx=-1,hjz=0,pg=0,s=20,ssx,csg=1,wq=0,gjz=csg+wq,t,z=0,l=0,x=0,y=60,u,sy=2,dy=1,fm
2022-01-21 17:36:41
1209
原创 离开中山路(深搜or宽搜)
原题连接:离开中山路非常的简单,我是用宽搜写的#include<bits/stdc++.h>#define N 1005using namespace std;int n;char a[N][N];int dx[] = {-1, 0, 0, 1};int dy[] = {0, -1, 1, 0};int vis[N][N];bool f[N][N];queue <pair <int, int> > Q;int main() { cin >.
2022-01-21 07:51:51
518
原创 链式前向星(c++)
链式前向星树、图的等的存储方式速度快定义:struct { int next;//上一个点 int to;////到达哪个点 int w;//边权}存储://常写一个函数(add)...int head[];//。。没什么好说的...void add (int x, int y, int z) { edge[++cnt].to = y; edge[cnt].w = z; edge[cnt].next = head[x]; head[x] = cnt; }遍历:f
2022-01-20 19:58:34
1002
原创 五子棋(c++)
//wuziqi.h#ifndef _WUZIQI_H_#define _WUZIQI_H_#include <iostream>using namespace std;class chessboard;class chessboard{public: int judge(); void build();//建立棋盘 void changeblack(int goalx, int goaly, int& goal);//改变棋盘数组元素即更新棋子 void ch
2022-01-20 07:42:12
716
原创 随机生成计算题
随机生成计算题,可以帮助需要提升计算能力的朋友。代码里有便民文字,我就不多介绍了。#include<bits/stdc++.h>using namespace std;int main(){ long long n,a,x,z,s,s1,l,y,a1,m123,yushu; double t=0; srand(time(0)); cout<<"你总共要做几题。如5 就是做5题"<<endl; cin>>n; cout<&
2022-01-04 07:52:10
1182
原创 c++01背包模版
01背包dp先找个题目装箱问题需要考虑的就是这件物品放不放题目要求所有物品体积价值最大最后再减一下就好了#include<bits/stdc++.h>using namespace std;int maxv, n;int f[35][20005];//答案存在这!int v[35];//这件物品所需空间int main() { cin >> maxv >> n; for (int i = 1; i <= n; i++) cin >&
2022-01-03 18:25:09
799
原创 逛超市的灵感c++
大家逛超市是否为找东西而烦恼!!!???#include<bits/stdc++.h>#include<windows.h>using namespace std;map <string, pair <int, int> > m; const int N = 1e6 + 10;string f[N];int len;bool fx[N], fy[N];int main(){ while(1) { int a; cout <&l
2021-12-31 11:25:30
718
原创 (ni)马的遍历(Bfs)(c++)
众所周知,BFS是一个既简单有实用的算法。有一道very经典的BFS题:luoguP1443马的遍历#include<bits/stdc++.h>#define N 405using namespace std;int n, m;int x, y;int a[N][N];bool flag[N][N];const int dx[] = {-1, -2, -2, -1, 1, 2, 2, 1};const int dy[] = {2, 1, -1, -2, 2, 1, -1,
2021-12-12 18:10:37
937
原创 质数筛 (线性筛)c++
模板#include<bits/stdc++.h>using namespace std;const int N = 1e7 + 10;int a[N];int pri[N], len; int main() { int n; cin >> n; for (int i = 2; i <= n; i++) { if (a[i] == 0) pri[++len] = i, cout << i << ' '; for (int j
2021-11-27 15:39:21
463
3
原创 Lake Counting S(dfs)
题目详见洛谷P1596很水的题目,用dfs随便切#include<bits/stdc++.h>#define N 105using namespace std;char a[N][N];int n, m;bool flag[N][N];int ans = 0;int dx[10] = {-1, -1, -1, 0, 0, 1, 1, 1};int dy[10] = {-1, 0, 1, -1, 1, -1, 0, 1};void dfs (int x, int y) {
2021-11-13 08:09:48
393
原创 [CSP-J 2021] 小熊的果篮
今年普及组复赛好水,模拟250轻轻松松题目见小熊的果篮这题不就是链表吗?水的要死#include<bits/stdc++.h>#define N 200005using namespace std;struct Info { int x, pre, nxt;};Info a[N];int h[N];vector <int> v[2];int main() { int n; scanf ("%d", &n); for (int i = 1; i &
2021-11-12 11:02:07
1915
2
原创 字符串哈希(哈希模版)
详细题目见洛谷P3370字符转哈希map做法(不要脸做法)#include<bits/stdc++.h>using namespace std;const int N = 1e4 + 10;string a[N];map <string, bool> m;int ans = 0;int main() { int n; scanf ("%d", &n); for (int i = 1; i <= n; i++) cin >> a[i];
2021-11-12 10:24:35
261
原创 二叉树问题(lca)
题目见:洛谷P3884#include<bits/stdc++.h>using namespace std;struct trees { int Left, Right, Father;};const int N = 110;trees a[N];int depth[N];int layer[N];bool h[N];void dfs (int x, int dep) { if (x == 0) return; depth[x] = dep; layer[dep]+
2021-11-11 20:31:50
381
原创 c++csp-2021营业额统计
详细题目见洛谷P2234题目描述Tiger 最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。Tiger 拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况:当最小波动值越大时,就说明营业情况越不稳定。
2021-11-11 19:55:25
736
原创 特殊的质数肋骨(dfs)
闲来无事,做了一道dfs水题特殊的质数肋骨农民约翰的母牛总是产生最好的肋骨。你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们。农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成一个质数。举例来说:7 3 3 1 7331 全部肋骨上的数字 7331是质数;三根肋骨 733是质数;二根肋骨 73 是质数;当然,最后一根肋骨 7 也是质数。7331 被叫做长度 4 的特殊质数。写一个程序对给定的肋骨的数目 n,求出所有的特殊质数。1不是质数。
2021-11-11 18:59:57
329
原创 淘汰赛(二叉树)
有 2^n (n≤7) 个国家参加世界杯决赛圈且进入淘汰赛环节。我经知道各个国家的能力值,且都不相等。能力值高的国家和能力值低的国家踢比赛时高者获胜。1 号国家和 2 号国家踢一场比赛,胜者晋级。3 号国家和 4 号国家也踢一场,胜者晋级……晋级后的国家用相同的方法继续完成赛程,直到决出冠军。给出各个国家的能力值,请问亚军是哪个国家?输入格式无输出格式无输入输出样例输入 #134 2 3 1 10 5 9 7输出 #11#include<bits/stdc++.h>usi
2021-11-11 18:51:33
687
原创 c++求先序排列 [NOIP2001 普及组]
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度 len≤8)。输入格式22行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。输出格式11行,表示一棵二叉树的先序。输入输出样例输入 #1BADCBDCA输出 #1ABCD#include<bits/stdc++.h>using namespace std;string a, b;int len;void dfs (int zhong, int zhlen, int
2021-11-11 18:27:36
466
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人