错误总结
1.\(memset\)很费时间,跟遍历一遍没啥区别,所以能反复刷新的不用\(memset\)就不要用
2.浮点数例外,就是类型转化的时候处理错误了
比如
void work(){
for( R i = 1 ; i <= r ; i ++ ){
for( R j = 1 ; j <= b ; j ++ ){
if( r - i < b - j ) continue ;
printf( "%ld %ld\n" , r - i , b - j ) ;
f [i][j] = ( r - j ) / ( r + b - i - j ) * f [i - 1][j] + ( b - j ) / ( r + b - i - j ) * f [i][j - 1] ;
if( r - i == b - j )
cnt ++ , ans += f [i][j] ;
}
} printf( "%Lf\n" , f [r][b] ) ;
}
这样就会浮点数例外,正确代码因该在转移的时候强制类型转化,(我把\(D\) typedef 成 \(long\ double\)了)
void work(){
for( R i = 1 ; i <= r ; i ++ ){
for( R j = 1 ; j <= b ; j ++ ){
if( r - i < b - j ) continue ;
printf( "%ld %ld\n" , r - i , b - j ) ;
f [i][j] = (D)( r - j ) / ( r + b - i - j ) * f [i - 1][j] + (D)( b - j ) / ( r + b - i - j ) * f [i][j - 1] ;
if( r - i == b - j )
cnt ++ , ans += f [i][j] ;
}
} printf( "%Lf\n" , f [r][b] ) ;
}
3.不管是答案不对还是\(TLE\),都有可能是数组开小了,所以数据不对先开大数组再说
4.\(printf\)后面的\n
要是手惨按成\b
,\(100pts\)包你挂光。
5.读单个字符就读入一个字符串然后取他的首字符肯定没毛病,不要用\(getchar\)或者\(scanf\)作死。
6.遇到奇怪的\(CE\)有可能是数组开太大了,\(64\)位评测姬把\(long\)当成\(long\ long\)
$The \ light \ has \ betrayed \ me$