1.服务器不支持long double类型,最高支持到double(浮点型)和long long(长整型),注意 double 比float 更适宜。
2.while语句中的(cin>>M>>N && M!=0 && N!=0)(注意是与还是或)上式也可改写成(cin>>M>>N && (M || N))
3.在有些题目,特别是数据比较烦的时候,或者数据精度要求高的时候,可能精度要求不够。。。
4.(引用其他人的)奇怪的事情多着呢.昨天我做2305时候,m=1; for(i=1; i<=k; i++) m *= 2和 m = (1<<k);本来是一样的.但是前面提交就AC,后面一个就一直的WA。(以上为原文,不过我觉得左移和乘2是有所不同的,乘2符号位不会变,但是,左移式连同符号位一起左移,空位补零,那正数左移后就可能变成负数了)。
5.&可表示取地址符,也可以表示为对某个变量的引用。注意函数是传值,还是传地址的。
6.abs的参数是整型,而不是浮点型。
7.有些题目看上去好象用什么经典的算法,但如果你把题目看清楚,也许会有更简单的算法或者完全不同的思路,我刚开始就把他当作dp去做,可后来发现简单的循环就可以了。
8.关于cin和getline,cin后面不读入回车符,导致在输入流中还保存有,在下次读入getline的时候,getline就读入的是回车符,而不是我门要读的东西。1925考虑的就是这点。
9.当用cin TLE的时候试试scanf
10.当发现一个题目里面出现的数据跟16有关时,想想是否可以通过位运算解决(1219,1639)
11.一定要注意结果是否会是long long类型
12.输入是一整行的字符串。
如1392
如果你用chara[ 200 ]来保存,
cin.getline( a, 200 );
如果你用stringstr;来保存的:
Code:
getline( cin , str );
13.一个InputBlock对应一个OutputBlock,OutputBlock之间有空行。
如1152
int Case = 0;
{
if ( Case++ ) cout << endl;
...
cout << x << endl;
}
14.一个一行中输入不定个数字的输入处理方法:
charinput[501];
int blankCount;
int blankPos[501];
int i, j, s;
cin.getline(input, 500);
blankCount = 0;
blankPos[0] = 0;
j = strlen(input);
for (i = 0; i < j; ++ i)
{
if (input[i] == ' ')
{
blankCount ++;
blankPos[blankCount] = i;
}
}
for (i = 0; i <= blankCount; ++ i)
{
sscanf(input + blankPos[i],"%d", &s);
printf("%d\n", s);
}
15.题目中描述:“Anegative value for n indicates the end of input. ”
Sample Input
1
2
3
-1
如果在读题目的时候不注意,而根据sampleinput作判断,输入的时候用:
while(cin>>n && n!=-1)
{ ... }
则会出错,而应该
while(cin>>n && n > 0)
{ ... }
这是在zoj_1475中的一个陷阱。
16.打开文件的语句别写错了,还有文件名小心郁闷死你.多注意点细节,不要频繁提交。
17.一些常用的词汇(如max,min)作为变量名在本地机上可以正常编译,但递交上去不一定能编译.更郁闷的是用了一些常用的词汇,编译也通过了,输出答案也是正确的,但就是wa.解决方案:单词前面加上一个字母,比如lmax,lmin
18.当提交一直WA时,再仔细读一边题目,而不是一味的想特殊数据。