fhq Treap #include <bits/stdc++.h> using namespace std; #define rg register #define I inline #define gc getchar #define rep(i, a, b) for(int i = a; i <= b; ++i) #define per(i, a, b) for(int i = a; i >= b; --i) I int read(){ rg char ch = gc();
P5017 [NOIP2018 普及组] 摆渡车 题目 [NOIP2018 普及组] 摆渡车 题目描述 有 \(n\) 名同学要乘坐摆渡车从人大附中前往人民大学,第 \(i\) 位同学在第 \(t_i\) 分钟去 等车。只有一辆摆渡车在工作,但摆渡车容量可以视为无限大。摆渡车从人大附中出发、 把车上的同学送到人民大学、再
$* 和 $@ 在 Bash 中没有双引号时, 它们两个被扩展后, 结果是一样的, 都是表示外部输入的参数列表. 当有双引号时, 如 “$*”, “$@”, 这个时候, 前者表示的是用 IFS (Internal Field Separator) 分隔符连接起来的统一字符, 后者则表示的是输入的每个参数. 举例如下 文档名字为
https://codeforces.com/contest/1709/problem/C 题意 给你一个只包含{(,),?}的字符串。问有没有可能通过把?变成(或者),使得只存在唯一的改变方法能让字符串变为regular的 regular定义:A regular bracket sequence (or, shortly, an RBS) is a bracket sequence that can be transf
概述 std::rope,内部一说是可持久化平衡树,一说是块状链表。 它可以实现很多可持久化数组问题。 基本使用 #include<bits/extc++.h> using namespace __gnu_cxx; // 引入rope rope<char> a; //建立一个存储char的rope crope a; //crope实际上就是rope<char> a.push_back('Y'); //
模板 #include <iostream> #include <cstdio> using namespace std; const int N = 100010; int n, c[N], head[N], ver[N << 1], nex[N << 1], tot, cnt[N], num[N], siz[N], son[N], L[N], R[N], dfn, pos[N], maxn; long long sum[N], ans[N]; inlin
LeetCode229 多数元素 II 通过消除元素的方法确定候选, 即候选元素可以被消除\(\frac{n}{3}\)次. class Solution: def majorityElement(self, nums: List[int]) -> List[int]: proposal_1, proposal_2, cnt_1, cnt_2, n = 0, 0, 0, 0, len(nums) for i in
这个算法不能处理负环情况,请转到Floyd算法或SPFA算法(SPFA不能处理负环,但能判断负环) SPFA(SLF优化):https://www.cnblogs.com/yifan0305/p/16391419.html 代码很长,耐下心来看完,存储方法为链式前向星存储。 (如果内存放得下的话,建议稠密图用邻接矩阵(或者跑floyd),稀疏图用邻接表,只是
代码 //fw #include<iostream> #include<cstdio> #include<fstream> #include<algorithm> #include<cmath> #include<deque> #include<vector> #include<queue> #include<string> #include<cstring> #include<m
传送门: 洛谷 CF696B Puzzles 首先在此感谢 @OneZzz6174 大佬提供的学术支持。 思路 对于一个节点 \(i\) 的期望时间戳,我们记为 \(f_i\)。 与其他题解所述相似,我们根据 \(i\) 的父亲节点和它的兄弟节点可以得到 \(f_i\)。 具体地,它的兄弟节点对它的贡献(也是从它的父亲走到它这个节
【问题描述】 N个人正在排队进入一个音乐会。人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人。队列中任意两个人A和B ,如果他们是相邻或他们之间没有人比A或B高,那么他们是可以互相看得见的。写一个程序计算出有多少对人可以互相看见。 输入: 输入的第一
代码 #include <iostream> #include <cstdio> #include <string> #include <set> #include <vector> using namespace std; int r[1000000]={0}; char rc[1000000]; int crank[101]={-1}; int mrank[101]={-1}; int erank[101]={-1}; int arank[1
一个简单的想法是先用 \(2n - 3\) 次求直径 \(A, B\) 是 \(D\),每次距离最远的点。然后中心一定在直径上。 然后由于度数 \(> 3\) ,可以找到每个叶子在这条链上的相应位置( \(i\) 所在到直径最近的点),就用 \(a_i = (d_{i, A} +d_{i,b} - D) / 2\) 可以得到的距离,然后 \(d_{i, A} - a_i
一道全排列的题,可以用dfs,也可以用stl内置的函数next_permutation dfs版本 #include <algorithm> #include <iostream> #include <vector> using namespace std; vector<string> c(41000); bool st[10]; int n, cnt; char b[10]; string a; void dfs(int m) { if (m &
题目链接: https://www.luogu.com.cn/problem/P1896 题意: 在 \(n * n\) 的棋盘里面放 \(k\) 个国王,使他们互不攻击,共有多少种摆放方案。 国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。 #include <bits/stdc++.h> using namespace std; #define
1.剑指 Offer 15. 二进制中 1 的个数 与1同位与判断最低位是否是1,判断完右移继续判断下一个 1 class Solution { 2 public: 3 int hammingWeight(uint32_t n) { 4 int cnt = 0; 5 while(n){ 6 if(n & 1 == 1) cnt ++; 7 n >>=
洛谷传送门 一道线段树维护区间前缀最大值个数的好题。 思路 易得连接 \((0,0),(i,H_i)\) 的线段斜率为 \(s_i = \frac{H_i}{i}\)。则题要求的就是满足 \(i \in [1,n], s_i > \max\limits_{j=1}^{i-1} s_j\) 的 \(i\) 的个数。考虑线段树维护。 线段树上每个结点维护当前区间 \([l
1.问题描述 给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 。 一个子序列是从原始数组挑选一部分(也可以全部)元素而不改变相对位置形成的新数组 如果可以完成上述分割,则返回 true ;否则,返回 fals
易错点 测试点2,需要排序,先按n排,再按A排 如果用了map/vector,测试点0、1、3,每次循环完需要clear() 代码 #include <iostream> #include <cstdio> #include <string> #include <utility> #include <vector> #include <algorithm> using namespace std; bool is_nature(
//读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 #include <iostream>#include <stdio.h>#include <string.h> int main(void){ char num[102] = { 0 }; char pinyin[3] = { 0 }; int i = 0; int sum = 0; int cnt = 0; std::cin >> num;
思路 当一个数的所有因子的和(不包括自身)大于或等于这个数,那么这个数就是大美数 代码 #include <iostream> #include <cstdio> using namespace std; bool is_b(int a){ int cnt=0; for(int i=1;i<a;i++){ if(a%i==0){ cnt+=i; } } if(cnt>=a){ return 1; } else{
Description 神犇最近闲来无事,于是就思考哲学,研究数字之美。在神犇看来,如果一个数的各位能够被分成两个集合,而且这两个集合里的数的和相等,那么这个数就是优美的(具体原因就只有神犇才知道了)。现在神犇在思考另一个问题,在区间[A,B]中有多少个数是优美的?这个问题对于神犇来说很简单,相
目录2022.7.14 模拟赛数独分糖果维修机器人小乔 2022.7.14 模拟赛 \(\to\text{link}\leftarrow\) 数独 思路: 大模拟 \(40min\) 写完调完,难度一般般 #include<bits/stdc++.h> using namespace std; inline int read(){ int x=0,f=1;char ch=getchar(); while(!isdigit(ch)){if(c
基本含义 在一张流网络中,最大流是不唯一的。那么给每条边再加上一个费用值,所有最大流中费用和的极值就叫费用流。对应地,费用最小值为最小费用最大流,费用最大值为最大费用最大流。 算法内容 使用 EK 算法或 Dinic 算法,把 bfs 换成 SPFA 就可以求出最小费用最大流。 需要注意,当流网
传送门 \(\texttt{Difficulty:2200}\) 题目大意 一个长为 \(n(1\le n\le5000,n\) 为偶数 \()\) 的升序序列 \(a(1\le a_i\le n)\) 。将 \(a\) 中的元素重新排布,组成序列 \(b\) ,使得 \(b_1 < b_2 > b_3 < b_4 > \ldots > b_{n-1} < b_n\) 并且 \(b_2 < b_4 < b_6 <