个人ACM入门总结

编程入门 行业动态 更新时间:2024-10-10 17:26:50

个人ACM<a href=https://www.elefans.com/category/jswz/34/1770026.html style=入门总结"/>

个人ACM入门总结

萌新入门备忘录,随时更新/纠错

输出

printf:
输出指定长度(N)的字符串, 超长时截断(限制大小M), 不足时右对齐(空格填充):   

 printf("%N.Ms", str);       

改为左对齐:    printf("%-N.Ms", str);     
N,M可以动态指定,用*代替M或者N,然后在参数列表里加上一个数字参数。
例子:printf("%-*.*s", 5,2,"123");

cout:

库 < iomanip > 包含了对输入输出的控制。

cout << fixed << setprecision(3) << i << endl;//控制小数点后精度

输入

速度:

(大约时间) cin = getline(cin) > scanf > getchar > fgets

用scanf读入string:

s.resize(n);
scanf("%s",s);

此时s大小必为n,不足会自动填充。

返回值:

fgets(s,MAX,stdio);会读取并保存换行符,结束时返回空指针(0)

>>操作重载函数遇到EOF返回0

scanf返回值为输入字符数,文件结尾返回EOF

竞赛相关

对于cin和cout

关同步流:std::ios::sync_with_stdio(false);

解除绑定:cin.tie(0),cout.tie(0);

注意,关闭同步后,不能再使用scanf, printf

  • 同步导致的效率问题,一些输入量大的题目会超时
  • 代码手动关闭同步,可能导致输出顺序错误
  • 数据本身特殊情况或编码问题导致的玄学问题

尽量不使用cin和cout,统一使用 stdio

对于样例

观察输入组数,是否含特殊情况(0,重复样例,生成闭环等

输出时注意格式,不一定完全与sample一致,看题目的要求

 尽量不用 using namespace std,防止命名混乱

使用函数、STL等时刻注意特殊性质,谨防乱用导致出错

拿到题目第一步是理解(准确理解!)题意,不能盲目开始写题

利用 tolower() 函数的返回值改变字符串,其本身不改变字符串

常数优化

位操作具备更快的运算速度
x=x*2;           x<<=1;
y=y/2;           y>>=1;
if(x%2==1);      if(x&1) ;
x=pow(2,n);      x=(1<<n);std::vector<bool>的效率会很慢 (考虑用std::bitset)对非递归且代码块短的函数,声明为内联(inline)
int cmp(int a,int b) {return a<b;}
改为
inline int cmp(int a,int b) {return a<b;}每次调用函数时都会重新创建它的形参,并用传入的实参对形参进行初始化
(实参被值传递时相当于创建实参的拷贝),拷贝大的类类型对象或者容器对象比较低效
(比如vector,或者一个很长的string),如果函数无须改变形参的值,最好将其声明为常量引用。
inline int cmp(string a,string b) {return a<b;}
//改为
inline int cmp(const string &a,const string &b) {return a<b;}if条件语句比min和三元运算符快由集训队大佬总结while(1) printf("%");

更多推荐

个人ACM入门总结

本文发布于:2024-02-07 11:53:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1756973.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:入门   ACM

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!