最近自己搞小项目搞得多,同时也在洛谷上刷题,看到了这道题:Mayan 游戏,发现是道模拟题,于是感到格外亲切。
码了码,结果在本地不停 RE ,上网一查才明白:
vector.size()
是unsigned int
,size()为0的时候,size()-1不是
−
1
-1
−1 而是
4294967295
4294967295
4294967295.
原来的代码:
if(tmp.col[i+1].size()-1 >= j){
int t = tmp.col[i][j];
tmp.col[i][j] = tmp.col[i+1][j];
tmp.col[i+1][j] = t;
}
当tmp.col[i+1]
这个vector里没有元素时,左边这个式子为(unsigned int) -1 = 4294967295
,显然是大于右边的,于是下面本不该执行的内容被错误的执行了,导致了
R
E
RE
RE。
遇到这种情况有两种解决办法:
- 第一种:
将 vector.size() 强转成int
型。if((int)tmp.col[i+1].size()-1 >= j){ int t = tmp.col[i][j]; tmp.col[i][j] = tmp.col[i+1][j]; tmp.col[i+1][j] = t; }
- 第二种:
使用一个int变量
去接收 vector.size() 的值。int l = tmp.col[i+1].size(); if(l-1 >= j){ int t = tmp.col[i][j]; tmp.col[i][j] = tmp.col[i+1][j]; tmp.col[i+1][j] = t; }