1
不能对double数组用 memset(an, 0x3f, sizeof an)
但是可以memset(an, -1, sizeof an); 结果是一个负数
2 弧度转换
get PI = 3.1415926
1 PI = 1 弧度 = 180 度
double PI = acos(-1);
cout << PI << endl;
sin cos 里面放的都是弧度
角度转弧度
double s = 30 * PI / 180;
cout << sin(s) << endl;
double ss = 60 * PI / 180;
cout << cos(ss) << endl;
3 当二维数组传进了函数里面(AcWing 345. 牛站:这题把要讲的都用了一遍)
// 传二维数组第二维必须赋值 不赋值会...报错
void mul(int c[][N], int a[][N], int b[][N])
{
/*
如果我们希望一个变量仅限于在本源文件中使用,在其他源文件中不能引用
也就是说限制其作用域只在定义该变量的源文件内有效,而在同一源程序的其他源文件中不能使用
这时,就可以通过在全局变量之前加上关键字 static 来实现,使全局变量被定义成为一个静态全局变量
*/
static int tp[N][N];
memset(tp, 0x3f, sizeof tp);
// 这里的k和外面的k一点关系没有 全局变量和局部变量重名优先用局部
for(int k = 1; k <= n; k ++ )
{
for(int i = 1; i <= n; i ++ )
{
for(int j = 1; j <= n; j ++ )
{
// k == a + b
// k短路 k是枚举的中间点
// 长度为k,i->j = 长度为a,i->k + 长度为b,k->j
// d[k][i][j] = min(d[k][i][j], d[a][i][k] + d[b][k][j]);
tp[i][j] = min(tp[i][j], a[i][k] + b[k][j]);
}
}
}
// 本来应该sizeof c 的但c传进来的是指针sizeof没有大小 所以sizeof tp代替
// 函数里用别的名字传进来的全局变量是可以被改变的
memcpy(c, tp, sizeof tp);
return ;
}
4 重载运算符 配优先队列
priority_queue<Node, vector<Node>, greater<Node> > hp;
这是一个小根堆 根结点的键值是所有堆结点键值中最小者
重载 > 号, 是因为使用了 greater<ver>
这里面是用的大于号实现的小根堆,所以要重载大于号
struct Node
{
int id, ty, di;
bool operator>(const Node &W) const
{
return di > W.di;
}
};
5 stringstream用法
一个数字转化为字符串:
double a = 133.454;
string str;
stringstream s;
s << a;
s >> str;
一个字符串转化为数字
string str = "13243.4545";
double a;
stringstream s;
s << str;
s >> a;
把一行由空格分开的数字读到一个数组里面
int p, cnt = 0;
getline(cin, line);
// 这里的 ccin 就是一个变量名
stringstream ccin(line);
// 这样就能把所有数字拆出来
while(ccin >> p) stop[ ++ cnt] = p;
或者这么写
getline(cin,line);
stringstream s;
s << line; //将字符串line输入stringstream的流s中
while(s >> a[cnt]) cnt ++;//将流s中的数字一个个放出来
6 cin里面保留小数位数
double s = 123123123123.1231445123;
// 可以转但是会失精度
string ss = to_string(s);
cout << ss << endl;
// 有效三位数字
cout << setprecision(3) << s << endl;
// 保留三位小数
cout << setiosflags(ios::fixed) << setprecision(5) << s << endl;
7 快读(Y总从来没用过)
template<typename T>void in(T &x) {
char ch = getchar();bool flag = 0;x = 0;
while(ch < '0' || ch > '9') flag |= (ch == '-'), ch = getchar();
while(ch <= '9' && ch >= '0') x = (x << 1) + (x << 3) + ch - '0', ch = getchar();
if(flag) x = -x;return ;
}
void solve()
{
in(n);
cout << n << endl;
return ;
}