ACM常用技巧与知识
1.输入外挂
inline void scan(long long &k)//看情况改类型
{
char c;
while((c=getchar())&&(c>’9’||c<’0’));k=c-‘0’;
while((c=getchar())&&(c<=’9’&&c>=’0’))k=k*10+c-‘0’;
}
用于有大量数字的输入;
2.Cin.push_back(ch);放回刚刚读到的字符;
3.读入 D1000 等数据时 ;
Scanf(“%s”,s); sscanf(“%c%d”,&ch,&num);
4,爆栈试试加上这句
#pragma comment(linker, “/STACK:102400000,102400000”)
5.Printf 保留 n 位小数时,用 printf(“%.nf”,x)代替 printf(“%.nlf”,x)
或用 long double 提高精度。(因为 float 类型参数会被提升为 double 类型,
所以单单有%f 就是足够的,有些编译器不支持 lf)
7.要求输出 025 时,把输出格式变为%03d 即可,位宽为 3,不足用 0 填充,%3d
是位宽为 3,不足就填空格。
8.交换变量:swap(a,b); a^=b^=a^=b;(不建议使用)
9.返回 x 的整数部分,floor(x);减小误差 四舍五入 floor(x+0.5);四舍五
入还可以直接%.0f.
10. 计时器 : #include printf(“Time used
= %.2lf\n”,(double)clock() /CLOCKS_PER_SEC);输入输出的时间也算在
里面了
11.EOF windows 下,Ctrl+z; linux 下,Ctrl+d;
12.#define LOCAL \从文件中读入,和输出到文件
#ifdef LOCAL
Freopen(“ date.in ”,” r ”, stdin);
Freopen(“ date.out ”,” w ”,stdout);
#endif
13.Sprintf(buf,”%d”,a);将信息输出到字符串。
14.大写字母和小写字母的转换
#include
#define isok(x) assert(x>=0) 宏定义方便。
16.下一个排列 while(next_permutation(p,p+n))应从最小排序开始得到
所有排序.包含于 algorithm
17.printf 默认为右对齐,要左对齐只需要%后面加-即
Printf(“%-d”,a);