**ACM注意事项**
- 精度问题:double定义的变量,要是限制小数点的话,最好用.f 输出。OJ上G++double精确小数点要用.f提交,不然WA
- cin可以输入 "Mark" 或 "Twain",但不能输入 "Mark Twain",因为 cin 不能输入包含嵌入空格的字符串。
- 在C语言中余数的符号是和分母的符号相同。即:(-10)%3==-1。
- c语言中计算的时候最好先将负数取正再进行计算
- % 只用于整型的计算,后一个数不能是0,参与运算的数据可正可负。
- while(scanf("%d",&n)!=EOF)和while(~scanf("%d",&n))取1其一,否则会造成输出超时
- 输出%需要打两个%才行。
-
unsigned int :0~4294967295 (10位)
int : -2^31~2^31 (10位) int 64: -2^63~2^63-1 19位
long long: -2^63 - 1~2^63 - 1(19位数 )
unsigned long long:0~2^64 - 1(20位数,1e19)
- %llu对应的数据类型为unsigned long long,20位,这是C语言用来表示整数的最大类型。
-
_int128需要自己写输入输出函数,好像是编译器不支持
-
fmod()函数:可以对浮点型数据进行取模运算,后一个数可为0,这时函数返回NaN。头文件:#include<math.h>
1 int main() 2 { 3 float x=10.0; 4 float y=-3.0; 5 float z=3.0; 6 printf("10.0%%3.0= %f\n",fmod(x,z)); //1.0 7 return 0; 8 }
*1LL
是为了在计算时,把int
类型的变量转化为long long
,然后再赋值给long long
类型的变量- 进行标记的时候开bool,否则一些题目会超内存,bool占一个字节,int占四个字节
- 不要随便去清空,耗时。区别mem和for清空,数据小的用for,数据大的用men
- getchar() 然后%c输入,有些oj会出现两个甚至多个回车,直接scanf(" %c")就可以吸收掉前面一个甚至多个回车
- 除了记忆化搜索需要return 一个确定的值,其他的深搜是回溯,基本用void的多
- 线段树为什么开四倍空间?https://www.cnblogs.com/FengZeng666/p/11446827.html
- ios.sync_with_stdio(false);
// 那么cin, 就不能跟C的 scanf,sscanf, getchar, fgets之类的一起使用了。 - vector使用迭代器的时候可以v.begin()+1,map不行,会报错,需要continue去控制输出的第一个元素不被输出
- 能用for尽量别用while,使用for循环的时候定义在内部,用完就相当于释放了,减少占用内存。
- 开long long会更耗时,会导致超时,因为long long占四个字节,int占一个字节
- int越界会变成负数,此时需要开long long。最小值:当int型的数据到了最小值时,然后再减1(即越界时),它会变成正数,如果此时再将此数值加1,就可以知道这最小值是多少了;最大值:同理,当int型的数据到了最大值时,然后再加1(即越界时),它会变成负数,如果此时再将此数值减1,就可以知道这最大值是多少了。
-
#include<stdio.h> #include<string.h> using namespace std;
没有用到using namespace std;而写这个的话,c++提交会造成编译错误
//这样子可以
#include<stdio.h> #include<iostream> #include<string.h> using namespace std; - CCCC不允许用gets输入。
- flag=1,break;这种写法不被允许
- double 定义,想要取整数部分输出%d输出,不可以,输出为0
- lg打到程序中是log
-
精度问题
+0.5的话必须要赋值给int型的变量,然后 %d 的形式输出
否则直接 %0.lf 输出即可,这个表示保留整数部分四舍五入