HDU1437+模拟

枚举中间可能出现的天气

 1 #include<stdio.h>

 2 #include<string.h>

 3 #include<stdlib.h>

 4 const int maxn = 1005;

 5 double mat[ 5 ][ 5 ];

 6 

 7 void solve( int L,int R,int n ){

 8     double ans[ 5 ],tp[ 5 ];

 9     double res = 0;

10     for( int i=1;i<=n;i++ ){

11         if( i==1 ){

12             ans[ 1 ] = mat[ L ][ 1 ];

13             ans[ 2 ] = mat[ L ][ 2 ];

14             ans[ 3 ] = mat[ L ][ 3 ];

15             //printf("i = 1: %lf %lf %lf\n",ans[1],ans[2],ans[3]);

16             continue;

17         }

18         else if( i==n ){

19             res = ans[ 1 ]*mat[ 1 ][ R ];

20             res += ans[ 2 ]*mat[ 2 ][ R ];

21             res += ans[ 3 ]*mat[ 3 ][ R ];

22             continue;

23         }

24         else {

25             tp[1] = ans[1],tp[2] = ans[2],tp[3] = ans[3];

26             ans[ 1 ] = tp[ 1 ]*mat[ 1 ][ 1 ]+tp[ 2 ]*mat[ 2 ][ 1 ]+tp[ 3 ]*mat[ 3 ][ 1 ];

27             ans[ 2 ] = tp[ 1 ]*mat[ 1 ][ 2 ]+tp[ 2 ]*mat[ 2 ][ 2 ]+tp[ 3 ]*mat[ 3 ][ 2 ];

28             ans[ 3 ] = tp[ 1 ]*mat[ 1 ][ 3 ]+tp[ 2 ]*mat[ 2 ][ 3 ]+tp[ 3 ]*mat[ 3 ][ 3 ];

29            // ans[1] = tp[1],ans[2] = tp[2],ans[3] = tp[3];

30             //printf("i = %d: %lf %lf %lf\n",i,ans[1],ans[2],ans[3]);

31             continue;

32         }

33     }

34     printf("%.3lf\n",res);

35 }

36 

37 int main(){

38     //freopen("in.txt","r",stdin);

39     int T;

40     scanf("%d",&T);

41     while( T-- ){

42         for( int i=1;i<=3;i++ ){

43             for( int j=1;j<=3;j++ ){

44                 scanf("%lf",&mat[ i ][ j ]);

45             }

46         }

47         int K;

48         scanf("%d",&K);

49         while( K-- ){

50             int L,R,N;

51             scanf("%d%d%d",&L,&R,&N);

52             if( N==1 ){

53                 printf("%.3lf\n",mat[ L ][ R ]);

54                 continue;

55             }

56             solve( L,R,N );

57         }

58     }

59     return 0;

60 }
View Code

 

你可能感兴趣的:(HDU)