Loading

错误总结

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\)

posted @ 2021-02-23 20:00  Soresen  阅读(93)  评论(1编辑  收藏  举报