各种小知识
1.std:: cin/cout/endl
2.sqrt使用时大多需要要强制类型转化,因为sqrt只支持double和float类型,
可以这样c=(int) sqrt((double)a*a+b*b);
或者c=(int) sqrt((float)a*a+b*b);
3.各种输入
cin.get()、cin.getline()、getline、gets
4.->
指针指向结构中的成员变量,其形象是个箭头,代表指向的结构
比如:
struct STUDENT {
int number;
char name[20];
}a,*p;
a.number=101;
strcpy(a.name,"王小明");
p=a;
if ( p->number==101 )
printf("%s\n",p->name);
当用实例访问结构中的变量number时,写成a.number 当用指向实例的指针访问时,写成p->number
5.puts
将指定的字符串输出到屏幕
6.putchar
c语言函数之一,作用是向终端输出一个字符。
其格式为putchar(c),其中c可以是被单引号(英文状态下)引起来的一个字符,
可以是介于0~127之间的一个十进制整型数(包含0和127),
也可以是事先用char定义好的一个字符型变量。
8.isdigit
作用:检查其参数是否为十进制数字字符
isdigit()函数判断字符串是否为数字
若参数c为阿拉伯数字0~9,则返回非0值,否则返回NULL。
9.二维偏序主要思路
二维偏序就是 x和y两个维度的共同比较 这种比较是二维的 同时他不是一个全序关系
10.operator
在C++中用到operator关键字,表示运算符重载.
<类名> operator <运算符>(<参数表>)
operator是定义运算符重载函数的关键字。
11.fgets
fgets,是C语言中从文件中获取字符串函数。
从文件结构体指针stream中读取数据,每次读取一行。
读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),
如果文件中的该行,不足bufsize个字符,则读完该行就结束。
函数成功将返回buf,失败或读到文件结尾返回NULL。
因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。
12.vector::iterator it
https://blog.csdn.net/u010112268/article/details/81111086
13.链式前向星
14.完全背包
for (int i = 1; i <= n; ++i) {
for (int j = w[i]; j <= v; ++j) {
f[j] = max(f[j], f[j - c[i]] + v[i]);
}
}
或f[i][v]=max{ f[i-1][v-k*c[i]]+k*w[i] | 0<=k*c[i]<=v }
15.基环树
https://blog.csdn.net/Q1410136042/article/details/81152191
https://blog.csdn.net/Binary_Heap/article/details/82080267
基环树没什么用。
它只能解决部分特殊问题,而这类问题通常会注明“边数=点数”,解法也比较单一,常被与其他算法一同考察。
16.各类背包问题
17.知识点超级全的网站
18.克鲁斯卡尔
19.在线算法和离线算法的区别
倍增算法先预处理每个点向上的路径,每次询问一对节点的时候,找到最近的2^k次公共祖先,然后向上跳2^(k-1),一直到找到答案。来一个询问,就回答一次。
Tarjan算法把这个询问作为一条边挂在树上,最后做一次遍历,用并查集快速查找当前这棵子树的根。得到所有询问后统一回答。
20.画图软件
21.神奇的字符串输入输出
#include<bits/stdc++.h> using namespace std; char a[100]; int main(){ scanf("%s", a + 1);//虽然不知道为什么,但这样确实可以读入一个字符串(一串字符) cout << a[5];//这也不知为什么,输出的就是上面输入的字符串的第5个 }
22.超详细的树链剖分
23.考试错误集锦
24.ios::sync_with_stdio(false)
25.前缀和