ACM输入模板

如何输入

连续输入

1
2
3
4
5
6
7
8
9
10
11
12
char a;
while(a!='\n'){
a=getchar();
// 处理输入的a,a注意是字符串
}


while (cin >> a >> b)
{
cout << a + b << endl;
}
// 等价于C的读到EOF

输入多行(含空格),自行按照\n分段。

1
getline(cin,string);

TODO:二叉树

如何输出

  • 取模操作 int Mod = 1e9 + 7;
    • 注意中间环节取模,因为中间可能就爆炸了

报错

1
error: no matching function for call to ‘min’

【解决】:查看min函数,max函数,比较的内容的类型是否一致

1
2
3
4
error: expected parameter declarator

# 原代码
vector<int> myset(100);

这是因为,编译器无法识别这是函数还是数组

正确写法是 vector<int> myset=vector<int>(100)


上机注意

  • 写函数记得带&,保证引用的改变!
1
bool dfs(int node, vector<int>& visit, vector<vector<int>>& edge,vector<int>& res)
  • long long

    1
    2
    typedef long long ll;
    // 注意是typedef
  • 输入输出优化

    1
    ios::sync_with_stdio(false);
  • memset

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
memset(a,0x7fffffffsizeof(a))
//0x7fffffff 或 0x7FFFFFFF,全部初始化为int的最大值,即2147483647;
memset(a,127sizeof(a)),全部初始化为int的较大值,即2139062143
memset(a,0sizeof(a)),全部初始化为0
memset(a,-1sizeof(a)),全部初始化为-1
memset(a,128sizeof(a)),全部初始化为一个很小的数,比int最小值略大,为-2139062144

memset(a,0x80000000sizeof(a)),全部初始化为int的最小值,为-2^31=-2147483648


如果是double数组:
double类似范围为:-1.7e+3081.7e+308
memset(a,127sizeof(a)),全部初始化为一个很大的数1.38e+306
memset(a,0sizeof(a)),全部初始化为清0
memset(a,128sizeof(a)),全部初始化为一个很小的数-2.93e+306


别用

1
2
int l,r=1;
// l还没赋值呢大哥!你只赋值了r
1
2
3
4
5
// 以下代码报错,因为你用了const,所以不支持排序
for (const auto &myMat_Single : myMat)
{
sort(myMat_Single.second.begin(), myMat_Single.second.end());
}

小心死循环

1
2
if(i=1)
// 大哥!是==(两个等号),不是一个等号

int和double

1
2
 double aver = tol / N;
 // tol和N都是int,×,这样会超界,建议把tol改成double