知识点总结
雨羊
学生
展开
-
容斥定理
斥原理可以描述如下:要计算几个集合并集的大小,我们要先将所有单个集合的大小计算出来,然后减去所有两个集合相交的部分,再加回所有三个集合相交的部分,再减去所有四个集合相交的部分,依此类推,一直计算到所有集合相交的部分。简单来说,就是奇加偶减。举个例子:求1~n中多少个数不是2,3,5,7的倍数,当n=10,结果只有1一个数。#include<i...原创 2019-04-02 17:24:27 · 622 阅读 · 0 评论 -
取模运算
取模运算规则(不适合除法)<1> (a + b) % p = (a % p + b % p) % p <2> a>=b时, (a - b) % p = (a % p - b % p+p) % p ,a<b时,判断结果正负<3> (a * b) % p = (a % p * b % p) % p <4> a ^ b ...原创 2018-07-18 10:03:26 · 484 阅读 · 0 评论 -
C语言对文件的读写操作
文件使用方式含义如果指定的文件不存在“r”(只读)为了输入数据,打开一个已存在的文本文件出错“w”(只写)为了输出数据,打开一个文本文件建立新文件“a”(追加)向文本文件尾部添加数据出错“rb”(只读)为了输入数据,打开一个二进制文件出错“wb”(只写)为了输出数据,打开一个二进制文件建立新文件“ab”(追加)向二进制文件尾添加数据出错文件路径名 fopen("D:\\CC\\data.dat",...原创 2018-06-23 00:33:01 · 569 阅读 · 0 评论 -
C语言 多文件项目
将所有文件放到一个项目下,可以一次编译所有cpp文件,通过main文件引用别文件中函数的方法:将所有函数声明在一个.h文件中,在需要调用这个函数的文件中#include".h"即可(文件前面加上#pragma once,可以保证头文件只被编译一次,避免一些错误)#include<>首先查找类库目录下的头文件#include""首先查找当前目录下的头文件例如:head.hvoid fu...原创 2018-06-22 23:36:16 · 1501 阅读 · 0 评论 -
表达式计算
#include<bits/stdc++.h>using namespace std;struct node { double num;//操作数 char op;//操作符 bool flag;//true表示操作数,false表示操作符};string str;stack<node> s;//操作符栈queue<node> q;//后缀表达...原创 2018-05-24 16:31:35 · 166 阅读 · 0 评论 -
拓扑排序 最短工期 PTA
题目:一个项目由若干个任务组成,任务之间有先后依赖顺序。项目经理需要设置一系列里程碑,在每个里程碑节点处检查任务的完成情况,并启动后续的任务。现给定一个项目中各个任务之间的关系,请你计算出这个项目的最早完工时间。输入格式:首先第一行给出两个正整数:项目里程碑的数量 N(≤)和任务总数 M。这里的里程碑从 0 到 N−1 编号。随后 M行,每行给出一项任务的描述,格式为“任务起始里程碑 任务结束里程...原创 2018-03-20 21:13:55 · 4269 阅读 · 1 评论 -
PTA家谱处理
人类学研究对于家族很感兴趣,于是研究人员搜集了一些家族的家谱进行研究。实验中,使用计算机处理家谱。为了实现这个目的,研究人员将家谱转换为文本文件。下面为家谱文本文件的实例:John Robert Frank Andrew Nancy David家谱文本文件中,每一行包含一个人的名字。第一行中的名字是这个家族最早的祖先。家谱仅包含最早祖先的后代,而他们的原创 2018-03-11 14:35:31 · 714 阅读 · 0 评论 -
二进制的运用 枚举
某君有 nn 个互不相同的正整数,现在他要从这 nn个正整数之中无重复地选取任意个数,并仅通过加法凑出整数 XX。求某君有多少种不同的方案来凑出整数 XX。输入格式第一行,输入两个整数 n,X(1 \leq n \leq 20, 1 \leq X \leq 2000)n,X(1≤n≤20,1≤X≤2000)。接下来输入 nn 个整数,每个整数不超过 100100。输出格式输原创 2017-12-19 16:22:54 · 825 阅读 · 0 评论 -
循环结的计算
余数检测法:模拟除法,比如我们要计算1/7这个小数的循环节,求第一组的余数r,不难得r=1%7=1,然后将r*10继续取余 r=(1×10)%7=3,每次求出一组余数的数据,我们需要判断一下:所求出的余数之前有没有出现过,只有余数出现过,那就说明循环节出现了,(余数为0时,说明不循环),然后我们记录循环节的位置pos(第一次出现的位置),在之后把从0到pos(不包括pos)之前的数据单独输出,这一...原创 2017-12-18 15:27:24 · 615 阅读 · 0 评论 -
拦截导弹(规律:下降子序列的个数等于最长上升子序列的长度)
问题描述 某国为了防御敌国的导弹袭击,发展出一种导弹 拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的 导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算转载 2017-10-26 15:23:51 · 432 阅读 · 0 评论 -
二叉树遍历
已知先序中序构树#include <cstdio>#include <iostream>using namespace std;const int N = 50;int pre[N], in[N], post[N]; //存放先序,中序,后序的数组 int n;//树中元素个数struct node { int data;//数据 node* ...原创 2017-07-27 18:46:13 · 349 阅读 · 0 评论 -
Trie树(Prefix Tree)介绍
本文用尽量简洁的语言介绍一种树形数据结构 —— Trie树。一、什么是Trie树Trie树,又叫字典树、前缀树(Prefix Tree)、单词查找树 或 键树,是一种多叉树结构。如下图: 上图是一棵Trie树,表示了关键字集合{“a”, “to”, “tea”, “ted”, “ten”, “i”, “in”, “inn”} 。从上图可以归纳出Trie树的基本性质:根节点不包含字符,除根节点外的每...转载 2018-07-12 18:03:20 · 243 阅读 · 0 评论 -
莫队算法
莫队算法我早有耳闻。。可惜前不久才去学习。但是自己看了看论文,也就1h左右,就能够全部理解了。也就是说其实这个算法不难。。好了,让我们进入正题。 我们首先来看一道例题:Description 有n个数字,给出k,以及m个查询。 每次查询的格式是L,r,求L~r(左右包含)这个区间内数字的出现次数刚好是k的数字种数。 范围:n<=30000...转载 2018-07-20 17:27:04 · 184 阅读 · 0 评论 -
素数判断
bool is_prime(int u) { if (u == 0 || u == 1)return false; if (u == 2)return true; if (u % 2 == 0)return false; for (int i = 3; i <= sqrt(u); i += 2) if (u%i == 0)return false; return true;...原创 2019-04-02 12:12:32 · 188 阅读 · 0 评论 -
分解质因子
任何一个合数可以分解为几个质数的乘积,这些质数也必然是这个合数的约数。超时模板:#include<bits/stdc++.h>using namespace std;vector<int> fun(int n) { vector<int> v; for (int i = 2; i <= n; i++) { while (n%i =...原创 2019-04-01 18:05:26 · 390 阅读 · 0 评论 -
欧拉降幂
欧拉定理:phi(n)为n的欧拉函数值,当n为质数时,n的欧拉函数值为n-1 降幂公式:对于一个问题求 a^b %n可以直接根据右边的条件把式子转换成上面三个中的一个 例题:题目大意:求2^n%1e9+7结果,1<=n<=10^100000题解:n很大,所以要用大数取模。p与2互质,所以2^n%p==2^(n%phi(p))%p,又因为p为质...原创 2019-01-29 14:30:50 · 349 阅读 · 0 评论 -
线段树
参考:https://www.cnblogs.com/TheRoadToTheGold/p/6254255.html数据结构——线段树O、引例A.给出n个数,n<=100,和m个询问,每次询问区间[l,r]的和,并输出。一种回答:这也太简单了,O(n)枚举搜索就行了。另一种回答:还用得着o(n)枚举,前缀和o(1)就搞定。那好,我再修改一下题目。B.给出n个数,n...原创 2019-02-04 12:02:01 · 130 阅读 · 0 评论 -
欧拉函数
参考链接:https://blog.csdn.net/liuzibujian/article/details/81086324什么是欧拉函数欧拉函数是小于x的整数中与x互质的数的个数,一般用φ(x)表示。特殊的,φ(1)=1。如何计算欧数值拉函欧拉函数的通式:φ(n)=n*(1-1/p1)*(1-1/p2)*(1-1/p3)*(1-1/p4)…..(1-1/pn),其中p1, p2...转载 2019-01-22 23:39:26 · 376 阅读 · 0 评论 -
stringstream
1、stringstream的基本操作#include<bits/stdc++.h>using namespace std;int main() { string s = "123"; stringstream ss(s);//s作为初值 string t = ss.str(); //ss.str()返回一个临时的string,函数执行完以后将被析构 //不能用此临...原创 2019-01-17 17:37:09 · 434 阅读 · 0 评论 -
位运算
运算符号编辑下面的a和b都是整数类型,则:含义 Pascal语言 C语言 C#语言 Java 按位与 a and b a & b a & b a & b 按位或 a or b a | b a | b a | b 按位异或 a xor b a ^ b a ^ b...原创 2018-07-31 09:21:59 · 178 阅读 · 0 评论 -
阶乘末尾0的个数
题目描述输入描述:输入数据共一行,一个正整数n,意义如“问题描述”。输出描述:输出一行描述答案:一个正整数k,表示S的末尾有k个0示例1输入复制10输出复制7说明 思路:观察这个表达式我们发现 0 的个数即为该表达式的最终结果含有 10 的几次方的因子。我们就联想到了拆素数。并且 10 的 n 次方都有...原创 2018-07-23 09:59:41 · 485 阅读 · 0 评论 -
C++STL容器使用经验总结
第1条:慎重选择容器类型。标准STL序列容器:vector、string、deque和list。标准STL关联容器:set、multiset、map和multimap。非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一“重型”string。非标准的关联容器hash_set、hase_multiset、hash_map和hash_multimap。v...原创 2018-07-27 11:57:28 · 227 阅读 · 0 评论 -
输入输出外挂总结
适用于正整数inline void scan_d(int &ret) { char c; ret = 0; while ((c = getchar()) < '0' || c > '9'); while (c >= '0' && c <= '9') { ret = ret * 10...原创 2018-07-30 16:02:37 · 230 阅读 · 0 评论 -
莫队算法 牛客多校赛题
Given a sequence of integers a 1 , a 2 , ..., a n and q pairs of integers (l 1 , r 1 ), (l 2 , r 2 ), ..., (l q , r q ), find count(l 1 , r 1 ),count(l 2 , r 2 ), ..., count(l q , r q ) where count(i...原创 2019-03-19 23:41:36 · 251 阅读 · 0 评论 -
星期几的计算
经常会遇到别人问你几月几号是星期几的情况,如何不查日历,直接用程序算出来呢?一种最简单的方法是,记住很久以前的某一天是星期几,比如公元1年1月1日是星期一。然后一天一天模拟,算出日期是星期几。这种方法容易理解,但是实现起来代码可能比较长。除此之外,有一个公式可以快速地根据日期计算这一天是星期几,这被称为蔡基姆拉尔森计算公式,假设星期为w,年份为y,月份为m,日期为d。w=(d+2×m+3×(m+1...原创 2018-03-30 19:09:43 · 731 阅读 · 0 评论 -
杂碎知识点总结
1、容器的for循环#include<iostream>#include<vector>#include<string>using namespace std;int main() { vector<int> v(5,6); for (auto x : v)cout << x << " "; cout原创 2018-03-20 14:34:01 · 262 阅读 · 0 评论 -
最短距离模板
dijkstra算法:求指定两点间的距离(不适用负边权),O(n^2)#include<iostream> #include<vector> #include<cstdio> using namespace std;const int INF = 0x3fffffff;const int MAXV = 105;int map[MAXV][MAX...原创 2017-07-21 12:55:52 · 429 阅读 · 0 评论 -
计算几何
转载地址:http://dev.gameres.com/Program/Abstract/Geometry.htm矢量的概念: 如果一条线段的端点是有次序之分的,我们把这种线段成为有向线段(directed segment)。如果有向线段p1p2的起点p1在坐标原点,我们可以把它称为矢量(vector)p2。 矢量加减法: 设二维矢量P = ( x1, y转载 2017-07-23 18:36:08 · 331 阅读 · 0 评论 -
重载运算符
#includeusing namespace std;struct node{ int a,b; node(int x,int y):a(x),b(y){//构造函数 } int operator ^ (const node &x){//重载运算符 ,一个参数 return x.a*b+x.b*a; } } ; int main() { node a(1,2),原创 2017-07-22 11:00:58 · 222 阅读 · 0 评论 -
结构体的简单赋值
#includeusing namespace std;struct node{ int a,b; node(){ } node(int x){ a=x; } node(int x,int y):a(x),b(y){ } } ; int main() { node t1,t2(1),t3(1,2); cout<<t1.a<<" "<<t1.b<<endl;原创 2017-07-22 01:32:01 · 337 阅读 · 0 评论 -
HDU 4544 湫湫系列故事——消灭兔子
题目链接:HDU 4544一个需要用到优先队列的题 ,这里需要用到自定义优先队列的优先级,优先队列的优先级与sort是相反的,less表示小的优先,重载小于运算符的时候,a>b在sort里面表示从大到小排列,在优先队列里面表示小的优先弹出,这里关于重载运算符介绍了三种写法,这也是我第一次用优先队列,把兔子血量从大到小排序,把大于兔子血量的箭压进队列 然后依次让价钱最低的弹出...这就是具体思路原创 2017-04-25 22:34:25 · 376 阅读 · 0 评论 -
原码,补码和反码
计算机中,数字是按补码存的,补码可以直接相加减,在依次变为反码,原码,就是最后的结果。一位二进制有八个数字,一个有符号定点数的最高位为符号位,0是正,1是副。正数的反码和补码都是和原码相同。负数的反码是将其原码除符号位之外的个位求反。负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。-1的原码 10000001-1的反码 11111110 (原创 2017-07-04 00:49:29 · 448 阅读 · 0 评论 -
time函数详解 转
包含文件: 一、在C语言中有time_t, tm, timeval等几种类型的时间1、time_ttime_t实际上是长整数类型,定义为:typedef long time_t; /* time value */ 2、timevaltimeval是一个结构体,在time.h中定义为:struct timeval{ __time_t转载 2017-07-17 20:15:10 · 1036 阅读 · 0 评论 -
汉诺塔模板
//汉诺塔 # include void hanoi ( int n, char a, char b, char c ) { if (n == 1) //只剩一个盘子时 { printf("%c -> %c\n",a,c); } else { han原创 2017-07-20 15:24:05 · 216 阅读 · 0 评论 -
最小生成树模板
prim算法 按点算,适合于点少的情况邻接矩阵,时间复杂度o(n^2)//PTA公路村村通 #include#includeusing namespace std;const int INF = 0x3fffffff;const int MAXV = 1005;int G[MAXV][MAXV], d[MAXV];//G存两个城镇直接的距离,d存已标记点到此点的最短距离 b原创 2017-07-20 15:00:43 · 234 阅读 · 0 评论 -
stl—string
1. string的概念可以用来存放字符串,操作方便2. string的基本操作头文件#includeString s;定义一个string;初始化 string s=”abc”;定义的时候直接赋值;Cin>>string;输入一个字符串,以空格、tab、换行结束;getline(cin,s);输入一个字符串,以回车结束,可以包含空格;getline(cin,s原创 2017-07-11 21:43:52 · 295 阅读 · 0 评论 -
Vector、set、string、map的区别
Vector、set、string、map的区别1.插入的区别(主要看参数)Vectore:添加、删除用push_back(x);pop_back();插入用index(it,x);Set::插入用index(x);String:插入 insert(pos,str);在pos下标处插入str;Insert(it,it1,it2);在it出插入it1~it2内元素原创 2017-07-12 00:25:21 · 354 阅读 · 0 评论 -
stl-set
1、 set的概念set翻译为集合,是一个内部有序且不含重复元素的容器,可用于删除重复元素的题目。2、 set的基本操作头文件#includeset s;定义一个set;s.insert(x);将x插入set容器中,并自动排序和去重 O(logN)//注意此时间复杂度,非O(1),插入后需要排序s.find(value);返回set中对应值为value的迭代器 O(logN原创 2017-07-11 22:30:09 · 196 阅读 · 0 评论 -
快速输入函数(比scanf快)
#includeusing namespace std;inline int read(){ int ans=0,res=1; char c; while((c=getchar())!=10&&c!=32)//10为换行,32空格 { ans*=res; ans+=c-'0'; res*=10; } return ans;}int main(){ int t原创 2017-07-22 01:24:34 · 1226 阅读 · 0 评论 -
time函数简单运用 转
头文件time.h @函数名称: localtime 函数原型: struct tm *localtime(const time_t *timer) 函数功能: 返回一个以tm结构表达的机器时间信息 函数返回: 以tm结构表达的时间,结构tm定义如下: [cpp] view plain copystruct tm{ int tm_sec; ...转载 2017-07-17 20:16:09 · 194 阅读 · 0 评论