一、Vector 特点:连续线性空间 <stl_vector.h> 1 typedef T value_type; 2 typedef value_type* pointer; 3 typedef value_type* iterator; //vector的迭代器是普通指针 => vector<int>::iterator ite; ite的类型是int* 4 typedef value_type& reference; 5 typedef
洛谷传送门 CF 传送门 题意 给一棵树和每个结点消失的概率 \(p_i\),有 \(q\) 组询问,每组询问要求: 将 \(p_u\) 修改为 \(x\) 查询森林的期望连通块数量 思路 题中给出的是每个结点消失的概率,那不妨先 \(p_i \gets 1 - p_i\) 将 \(p_i\) 转化为每个结点出现的概率。 众所周知森林连
设每个数最终的位置是$p_i$, 每个数当前的位置是$i$, 由于数是独一无二的, 所以pi - i是一一映射的关系 然后我们让$i -> p_i$, 建立一个图 那么, 考虑一个环, 我们可以让最小的值沿着来边走一$n-1$步($n$是环的大小), 亦或是让最小值和全局最小值交换一下, 让全局最小值来代替他走一圈, 再
题目链接: Problem - H - Codeforces 题意: 给定一个数组,找出第一个比q[i]大的数q[j]记录数据输出 分析: 对于一个任意的q[i]来说,若i<j且q[i]<q[j]那么答案一定不会在j后面出现,若i<j且q[i]>q[j]答案也不会在j后小于q[j]的元素中出现,所以对于每个元素可以删除其后面的元素,使用栈倒序操
A. YES or YES? 思路:algorithm库里有一个transform函数可以将字符串转为大写,然后判断是否等于YES #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int, int> PII; const int N = 100010; int n, m; int a[N]; void solve() { cin >
真的是,到最后还是从快读的行列里退出来了。 说明一下我博客里面奇奇怪怪的八格缩进是一个 bug ,我还在找 bug 的路上( 实际上我是一个标准的四格党,当然我也不会觉得所有其他缩进的就不好看( 标准板子: /* */ #include <bits/stdc++.h> using namespace std; #define File(a) freope
洛谷传送门 CF 传送门 还不错的一道思维 + 计数题。 思路 考虑一次操作后对 \(v\) 数组的影响:相当于将 \(v\) 数组左移一位,原本的 \(v_1\) 被覆盖了,\(v_n\) 补零,然后对于 \(i \in [1,n-1]\),\(v_i \gets \min(v_i - 1, 0)\)。同时还可以发现一个 \(v\) 数组对应着唯一一个排列。 考
A 直接模拟即可,注意 \(10^k\) 的情况(罚时!罚时!罚时!). A Code using namespace std; typedef long long ll; typedef pair<int, int> pii; ll n; int main() { int T; scanf("%d", &T); while (T--) { scanf("%lld", &n); ll t = n; ll x = 1;
A 分类讨论即可 . using namespace std; typedef long long ll; typedef pair<int, int> pii; int main() { int T, a11, a12, a21, a22; scanf("%d", &T); while (T--) { scanf("%d%d%d%d", &a11, &a12, &a21, &a22); if (!a
题意很简单,就是给一个数组,找出有多少个对是x ^ y > x & y 首先这题cf味道很冲,感觉当个div2b不是问题,那么我们就来考虑下高位讨论 所以我们可以计算出来每个ai的高位是多少,然后等差数列求和一下就行,最后用总对数减掉高位相同的对数,就是我们要的答案 #include <bits/stdc++.h
对于每个bi,可以求出ai属于 [(i / (bi + 1)) + 1 , i / bi] 然后就是贪心,参考了yyg的写法 依次枚举1~n,枚举到第i个时,把左边界为i的都放进优先队列,此时优先队列中所有元素的左边界<=i,取出一个右边界最小的即可 因为保证有解,所以取出的元素右边界一定>=i(反证:如果右边界<i,那么肯定属
今天开始学习VC++基础,系统编程栏目下都是WinAPI和MFC的内容,此为浏览博客园时学习的一篇文章,觉得很实用,拿来做笔记。 出处见最底部。 三行代码: typedef char CHAR; typedef CHAR *PCHAR,*LPCH,*PCH,*NPSTR,*LPSTR,*PSTR; typedef CONST CHAR
杂言 今天没啥好说哒,八道题,感觉能至少A5道,状态还算好,可是只有450pts 改题改题,练就完了 T1 俄罗斯国旗 看到 \(n<=50\) 直接 \(n^4\)搞起 枚举主要是枚举颜色不同的分界线行 T1 accept #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<vecto
关键代码核心逻辑 step 1 - 将OpenMesh:TriMesh的mesh转化为CGAL:Surface_mesh<Point_3>的mesh step 2 - 将三个轴上的坐标转化成CGAL:Point step 3 - 调用PMP::locate() step 4 - CGAL:Face_location转化为OpenMesh:faceHandle remark : 输入的是OpenMesh类型的mesh,输出的是Op
前言 喜提最劣解。 此做法系与神 SegmentTree 交流得到。 在此前,你能在网上找到的题解似乎只有某神仙的神秘做法,反正我根本不会。 故,本篇题解要旨在于给出思维的过程。 Version 1 读题。 你有一个正整数集合 \(S\),现在请你回答对于 \(1\le k\le n\),有多少种将编号为 \(1\sim k\)
O(M*sqrt(M))的做法超时 考虑直接暴力,用bitset实现小常数,时间复杂度O(N^3 / 64) #include<bits/stdc++.h> using namespace std; #define fr first #define se second #define et0 exit(0); #define rep(i,a,b) for(int i=a;i<=b;i++) #define rrep(i,a,b) for(int i=a;i>=b;i
晚上abc的G题考到了,听说是典中典 搞了一下O(m*sqrt(m))的写法 但是在atcoder超时,明天补bitset的写法 时间复杂度的证明 使用bitset的题解 #include<bits/stdc++.h> using namespace std; #define fr first #define se second #define et0 exit(0); typedef long long LL; type
#题目题目链接 --> https://codeforces.com/contest/1358/problem/D#思路及代码实现使劲想可以想到,在选择一段连续的区间时,最划算的选择应该是:* 左端点选择某个月的某个节点,右端点选择某个月的月末另外* 由于可能跨年份,我们先把两年拼接在一起* 接着枚举每一个右端点* 二分查找满
分治 + 推式子(构造绝对值不等式) 交换行的元素时每列的元素个数不变,交换列时同理,所以可以分别考虑行和列 对于行(列),可以看成均分纸牌的模型,唯一的不同点是从链变成了环(首尾可交换) 然后就可以推式子了 推式子具体过程 #include<bits/stdc++.h> using namespace std; #define fr
原题 每一个位置至多只会操作一次,因为如果操作偶数次的话,相当于不操作 最终的状态与操作的顺序无关 如果确定了第一行的操作方案,那么后面的行数都可以依此递推 #include<bits/stdc++.h> using namespace std; #define fr first #define se second typedef pair<int, int> PII;
复健!!! A&B 略 C 如果有仨正数或者仨负数都不行,然后根据 \(0\) 的数量判断一下边界情况即可。 #include<bits/stdc++.h> using namespace std; #define int long long typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef vector<int> vi; #
Atcoder题解汇总 ABC 159 E. Dividing Chocolate (二进制枚举,观察数据范围) 题意 有 \(H\times W\) 大小的方格矩阵,每个方格为 \(0\) or \(1\), 现在可以进行横切与竖切,询问最少切多少次可以保证最后的分块中每个分块都有不超过 \(K\) 个 \(1\)。 数据范围 \(1\leq H \leq 10\) \(
有两种做法 第一种定义cnt[j]为体积恰好为j的所有方案数 第二种定义cnt[j]为体积不超过j的所有方案数 定义不同,初始状态(边界)不同,计算答案的方式也不同 恰好的写法 //不超过的写法 #include<bits/stdc++.h> using namespace std; #define fr first #define se second typedef p
#include <bits/stdc++.h> using namespace std; #define Multicase() for(int T = read() ; T ; T--) #define lowbit(x) (x & (-x)) #define ls (p<<1) #define rs (p<<1|1) #define l(p) tree[p].ls #define r(p) tree[p].rs #define sum(p) tree[p
分组背包 输出方案可以跟最短路输出路径进行类比 背包DP输出方案—拓扑图分析 #include<bits/stdc++.h> using namespace std; #define fr first #define se second typedef pair<int, int> PII; typedef long long LL; typedef unsigned long long ULL; const int INF = 0X3