求助 TLE。
查看原帖
求助 TLE。
538609
Neutralized楼主2022/9/26 14:29

TLE on #65,本地跑得飞快(,完全不能理解,不知道哪里越界了。

#include <bits/stdc++.h>
using namespace std;

#define ri register int
#define g() getchar()
#define isd(x) (x>=48&&x<=57)
template<class T> inline void rd(T &x){ x=0; char i=g(); bool f=1; while(!isd(i)) f&=(i!='-'),i=g(); while(isd(i)) x=(x<<3)+(x<<1)+(i^48),i=g(); x*=((f<<1)-1); }
int n,T,t[5003]; double p[5003],f[2][5003],D[5003],Coe[5003];
inline double fstpow(double bs,int b,double rs=1.0){ while(b) (b&1)&&(rs*=bs),bs*=bs,b>>=1; return rs; }

main(){
	//freopen("my.in","r",stdin);
	rd(n),rd(T);
	for(ri i=1,x;i<=n;++i){
		rd(x),rd(t[i]),p[i]=x/100.0;
		Coe[i]=fstpow(1-p[i],t[i]-1);
	} register double res=0.0; f[0][1]=1.0; ri CUR=1;
	for(ri i=2,l=1;i<=n+1;++i,++l,CUR^=1){
		register double Now,A=1-p[l];
		fill(f[CUR]+1,f[CUR]+T+2,0);
		for(ri j=i-1;j<=T+1;++j){
			D[j]=A*D[j-1]+p[l]*f[CUR^1][j-1];
			if(j>t[l]){
				const register double Delta=Coe[l]*f[CUR^1][j-t[l]];
				f[CUR][j]+=Delta,D[j]-=p[l]*Delta;
			} f[CUR][j]+=D[j],res+=f[CUR][j];
		}
	} printf("%.9lf",res);
}
2022/9/26 14:29
加载中...