前言
唉,这个OJ,不是很友好。
谨记下自己做题过程中的一些坑,既然改变不了这个OJ,只能改变自己了。
注意事项
cin
,cout
慢
可用的解决方法有:
|
|
这一句可以提高一些速度,但是这样,cin
,cout
就不能与scanf
,printf
混用。
用scanf
,很不好的就是不能读入到string
,很难过。cstring和std::string转换如下:
|
|
另外,不要用endl
,真的很慢很慢,用"\n"
但是,很遗憾的是,std::string
某些情况下,也很慢
std::string
慢
如果输入限定了长度,尽量用reserve
控制下,这样会快不少
|
|
map
,set
等慢
不要管什么优雅,政治正确,做对题是硬道理。PAT一般对空间复杂度要求不高,一些用到map
之类的,可以考虑开一个很大的数组直接存。
getline()
注意如果之前cin读入一个数,后边还有换行,记得先getchar()
|
|
总结
- 能全局就全局,省得传参
- 看空间要求,如果没有特别限制,能全开就全开,5w的数组都没有问题
- 不要用
endl
ios::sync_with_stdio(false); cin.tie(nullptr);
- 用
string
的时候,如果没有变长要求,用reserve
,可以省不少时间 - 如果输出有较复杂格式要求,
iomanip
写不来,那就不要用cin
、cout
,否则可能超时 scanf
不支持std::string
,考虑读到char*
里,然后两者相互转换- 如果遇到多个测试点没有过,多半是题意理解有问题,先不要找着一些奇奇怪怪的边界条件BUG