const

专题训练之双连通

蹲街弑〆低调 提交于 2020-03-29 07:45:11
桥和割点例题+讲解:hihocoder1183 http://hihocoder.com/problemset/problem/1183 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<vector> 5 #include<set> 6 using namespace std; 7 const int maxn=1005; 8 const int maxm=200010; 9 struct edge{ 10 int to,nxt; 11 bool cut; 12 }edge[maxm*2]; 13 int head[maxn],tot; 14 int low[maxn],dfn[maxn]; 15 int index,n,bridge; 16 set<int>st; 17 bool cut[maxn]; 18 19 void addedge(int u,int v) 20 { 21 edge[tot].to=v; 22 edge[tot].nxt=head[u]; 23 edge[tot].cut=false; 24 head[u]=tot++; 25 } 26 27 void tarjan(int u,int pre) 28 { 29 low[u]=dfn[u]=++index; 30

二维平面计算几何模板

前提是你 提交于 2020-03-29 07:06:54
1 //author Eterna 2 #include<iostream> 3 #include<algorithm> 4 #include<cstdio> 5 #include<vector> 6 #include<cstring> 7 #include<string> 8 #include<cmath> 9 #include<cstdlib> 10 #include<utility> 11 #include<deque> 12 #include<queue> 13 using namespace std; 14 //------------------------------点与直线部分----------------------------- 15 const double pi = acos(-1.0); 16 const double eps = 1e-10; 17 //double比较和0的大小关系 18 inline int Dcmp(double x) { 19 if (fabs(x) < eps)return 0; 20 else return x < 0 ? -1 : 1; 21 } 22 struct point { 23 friend istream& operator >>(istream& in, point& rhs) { 24 in >> rhs

基于锁的并发数据结构

笑着哭i 提交于 2020-03-29 04:04:55
1. 使用细粒度锁和条件变量的线程安全队列 可以使用细粒度的锁来减小队列的临界区,这里使用了一个dummy node用来进一步减小锁的临界区。若要判断队列是否为空,只需要执行下述判断: head.get() == get_tail() 请注意,因为在进行push的时候需要修改tail,所以对tail的访问和修改都需要进行加锁。这里使用get_tail来封装这个操作,将锁的粒度减小到最低。 // lock tail mutex and return tail node node *get_tail() { std::lock_guard<std::mutex> tail_lock(tail_mutex); return tail; } 对push的操作只涉及到修改tail节点,所以只需要对tail节点进行加锁。加锁完成之后就可以修改tail使其指向新的tail节点。 void push(T new_value) { std::shared_ptr<T> new_data(std::make_shared<T>(std::move(new_value))); std::unique_ptr<node> p(new node); { std::lock_guard<std::mutex> tail_lock(tail_mutex); tail->data = new_data; node

C语言中字符数组库函数

拈花ヽ惹草 提交于 2020-03-29 04:04:25
以下内容摘自《C程序设计教程》(美)H.M.Deitel P.J.Deitel著,薛万鹏等译,机械工业出版社。 void *memccpy (void *dest, const void *src, int c, size_t n); 从sr*所指向的对象复制*个字符到*est所指向的对象中。如果复制过程中遇到了字符c则停止复制,返回指针指向dest中字符c的下一个位置;否则返回NULL。 void *memcpy (void *dest, const void *src, size_t n); 从sr*所指向的对象复制*个字符到*est所指向的对象中。返回指针为dest的值。 void *memchr (const void *s, int c, size_t n); 在s所指向的对象的前n个字符中搜索字符c。如果搜索到,返回指针指向字符c第一次出现的位置;否则返回NULL。 int memcmp (const void *s1, const void *s2, size_t n); 比较s1所指向的对象和s2所指向的对象的前n个字符。返回值是s1与s2第一个不同的字符差值。 int memicmp (const void *s1, const void *s2, size_t n); 比较s1所指向的对象和s2所指向的对象的前n个字符,忽略大小写

c语言字符串处理函数

这一生的挚爱 提交于 2020-03-29 04:03:21
很高效的字符串处理函数: void *memccpy (void *dest, const void *src, int c, size_t n); 从src所指向的对象复制n个字符到dest所指向的对象中。如果复制过程中遇到了字符c则停止复制,返回指针指向dest中字符c的下一个位置;否则返回NULL。 void *memcpy (void *dest, const void *src, size_t n); 从src所指向的对象复制n个字符到dest所指向的对象中。返回指针为dest的值。 void *memchr (const void *s, int c, size_t n); 在s所指向的对象的前n个字符中搜索字符c。如果搜索到,返回指针指向字符c第一次出现的位置;否则返回NULL。 int memcmp (const void *s1, const void *s2, size_t n); 比较s1所指向的对象和s2所指向的对象的前n个字符。返回值是s1与s2第一个不同的字符差值。 int memicmp (const void *s1, const void *s2, size_t n); 比较s1所指向的对象和s2所指向的对象的前n个字符,忽略大小写。返回值是s1与s2第一个不同的字符差值。 void *memmove (void *dest, const void

all index range ref eq_ref const system 索引type说明

こ雲淡風輕ζ 提交于 2020-03-28 23:19:57
背景知识 在使用sql的过程中经常需要建立索引,而每种索引是怎么处罚的又是怎么起到作用的,首先必须知道索引和索引的类型。 索引类型 type 我们可以清楚的看到 type 那一栏有 index ALL eq_ref ,他们都代表什么意思呢? 首先类型有许多,这里我只给大家介绍用的最多的 几种 类型: system>const>eq_ref>ref>range>index>ALL 越往左边,性能越高, 比如 system 就比 ALL 类型性能要高出许多 ,其中 system 、 const 只是理想类型,基本达不到; 我们自己实际能优化到 ref>range 这两个类型,就是你自己写 SQL ,如果你没优化基本上就是 ALL ,如果你优化了,那就尽量达到 ref>range 这两个级别; 左边基本达不到! 所以,要对 type 优化的前提是, 你需要有索引,如果你连索引都没有创建,那你就不用优化了,肯定是 ALL..... ; Type 级别详解 一 .system 级别 索引类型能是 system 的只有两种情况: 1. 只有一条数据的系统表 只有一条数据的系统表,就是系统里自带一张表,并且这个表就一条数据,这个基本上就达不到,这个是系统自带的表,而且就一条数据,所以基本达不到; 2. 或衍生表只能有一条数据的主查询 这个是可以实现的,但是在实际开发当中

第七周 可执行程序的卸载

不想你离开。 提交于 2020-03-28 22:40:52
一.预处理,编译,链接和目标文件的格式 可执行程序是怎么得来的: 预处理负责把include的文件包含进来及宏替换等工作 可执行文件的创建——预处理、编译和链接: 目标文件的格式ELF:A.out-->COFF-->PE/ELF ABI&目标文件格式: 一个可重定位保存着代码和适当的数据,用于和其他的object文件一起来创建一个可执行文件或是一个共享文件(主要是.o文件) 一个可执行文件保存着一个用来执行的程序,该文件指出exec(BA_OS)如何来创建程序进程映像(主要是.so文件) 当创建或增加一个进程映像的时候,系统理论上将拷贝一个文件的段到一个虚拟的内存段 一般静态链接会将所有代码放在一个代码段,动态链接的进程会有多个代码段 二.可执行程序,共享库和动态链接 可执行程序的执行环境 命令行参数和shell环境,一般我们执行一个程序的Shell环境即execve系统调用。 $ ls -l /usr/bin 列出/usr/bin下的目录信息 Shell本身不限制命令行参数的个数, 命令行参数的个数受限于命令自身 例如,int main(int argc, char *argv[]) 又如, int main(int argc, char *argv[], char *envp[]) Shell会调用execve将命令行参数和环境参数传递给可执行程序的main函数 int

Node实战-----爬取网页图片

无人久伴 提交于 2020-03-28 20:58:10
在本篇博文中我将实现一个完整的实例:主要使用Node.js爬取一个网页,需要通过第三方模块cheerio.js分析这个网页的内容,最后将这个网页的图片保存个在本地。 一、项目目录与思路 新建一个项目名为:project_01,输入命令在控制台,使其生成package.json文件: 命令: npm init 在控制台输入npm install命令下载需要的模块,在本项目中需要的request和cheerio模块,将使用命令进行下载到本地: 命令: npm install request cheerio -S 此时项目的文件夹的目录为: img文件夹用来存储图片文件 node_modules文件夹是模块默认的保存位置 index.js文件是整个项目的入口文件。 config.js文件是配置文件,用来存放网页地址和图片文件夹的路径,这样做的目的是使整个项目的可拓展性增强。 analyze.js文件用来存储分析DOM的方法。 package.json文件是包的描述文件。 打开node_modules文件夹可以看到相应的模块: 整体的思路:通过第三方模块request的请求网页地址,从而得到整个网页的DOM结构,根据DOM结构利用cheerio模块分析出图片文件的地址,再次请求这个地址,再次请求这个地址,最后将得到的图片数据存储在本地。 二、 配置网页地址及图片存放的文件夹 配置内容

数位DP

蓝咒 提交于 2020-03-28 20:40:25
这篇博客主要是数位DP的模版 基本上数位DP的题目都是比较套路的:一般都是问一个区间中满足条件的数的个数 套路1:差分 [L,R]中的答案 = [0,R]中答案 - [0,L]中答案 + chk(L) 套路2:按位DP(记忆化搜索实现),记录需要的前缀状态,特别的: f = 0/1 代表当前填的数字是否还和上界数字相同 g = 0/1 代表当前是否还在填前导零 复杂度一般为 O(位数*前缀状态数*10) 【P2657 [SCOI2009]windy数】 https://www.luogu.com.cn/problem/P2657 不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数? #pragma GCC optimize(3,"Ofast","inline")//O3优化 #pragma GCC optimize(2)//O2优化 #include <algorithm> #include <string> #include <string.h> #include <vector> #include <map> #include <stack> #include <set> #include <queue> #include <math.h> #include <cstdio> #include

CSUST--3.21排位周赛第五场 (全解)

筅森魡賤 提交于 2020-03-28 09:20:24
emmm,题目感觉都是思维题,我没有思维。。。蒟蒻的我等死了 题目链接: http://acm.csust.edu.cn/contest/80/problems 比赛过后无法提交,请到problem中提交 题目说明: A.红黑树(简单贪心) B.厂里吃鸡王(最短路|BFS) C.战域(简单思维) D.摆蔬菜2(简单思维) E.摆蔬菜1(线段树) 红黑树 题目大意:给你一个字符串序列,只含r和b,你有两种操作 1.交换任意两个字母的位置 2.修改任意的字母 你的目标是用最少的步骤使得字符串不存在相邻的字符相同,问最小步骤是多少 Sample Input 5 brbbb Sample Output 1 emmm,题目看起来有点唬人。。。红黑树,nmd乱来,实际上就是个简单的贪心而已,字符串不存在相邻字母相同的情况且该字符串只含2种字符,那么久只有两种情况了 1.rbrbrbrb... 2.brbrbrbr... 我们只需要将这两种情况列出来然后与给定的字符串进行对比看看哪里不一样就好了,计算一下有多少个r的位置不对$nb_r$,有多少个b的位置不对$nb_b$,那么我们可以将r和b互换,同时利用第二个操作将剩下的r或b修改掉,也就是说总的步骤就是$max(nb_r,nb_b)$。然后取两种情况的最小值就行了 以下是AC代码: #include <bits/stdc++.h> using