杭电oj2064、2067、2068、2073、2076-2078、2080、2083-2085

2064  汉诺塔III

 1 #include<stdio.h>
 2 
 3 int main(){
 4     int n,i;
 5     _int64 s[40];
 6     while(~scanf("%d",&n)){
 7         s[1] = 2;
 8         for(i=2;i<=n;i++){
 9             s[i] = 3*s[i-1] + 2;
10         }
11         printf("%I64d\n",s[n]);
12     }
13 
14 }

 

2067  小兔的棋盘

 1 #include<stdio.h>
 2 
 3 
 4 int main(){
 5     int n,i,k,j=0;
 6     _int64 s[40] = {0};
 7     s[1] = 1;s[0] = 1;
 8     for(i=2;i<=35;i++){
 9         for(k=0;k<i;k++){
10             s[i] += s[k]*s[i-1-k];
11         }
12     }
13     while(~scanf("%d",&n)){
14         if(n==-1){break;}
15         
16         printf("%d %d %I64d\n",++j,n,s[n]*2);
17     }
18 
19 }

 

卡特兰数的推导公式:

2068  RPG的错排

 1 #include<stdio.h>
 2 _int64 c(int a,int b){
 3     _int64 mul1=1,mul2=1,i;
 4     for(i=a;i>0;i--){
 5         mul1 *= i;
 6         mul2 *= b;
 7         b--;
 8     }
 9     return mul2/mul1;
10 }
11 
12 int main(){
13     int n,i;
14     _int64 s[15],sum;
15     s[1] = 0;s[2] = 1;
16     for(i=3;i<15;i++){
17         s[i] = (i-1)*(s[i-1]+s[i-2]);
18     }
19     while(~scanf("%d",&n)){
20         if(n==0){break;}
21         sum = 1;
22         for(i=1;i<=n/2;i++){
23             sum += c(i,n)*s[i];
24         }
25         printf("%I64d\n",sum);
26         
27     }
28 
29 }

 

2073  无限的路

 1 #include<stdio.h>
 2 #include<math.h>
 3 double len(int x,int y){
 4     int i,j;
 5     double len = 0,l;
 6     double t = sqrt(2);
 7     for(i=1;i<x+y;i++){
 8         len = len + t*i; 
 9     }
10     for(i=0;i<x+y;i++){
11         len = len + sqrt(i*i+(i+1)*(i+1));
12     }
13     len = len + t*x;
14     return len;
15 }
16 
17 int main(){
18     int n,x1,y1,x2,y2;
19     while(~scanf("%d",&n)){
20         while(n--){
21             scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
22 
23             printf("%.3lf\n",fabs(len(x2,y2)-len(x1,y1)));
24         }
25     }
26 
27 }

 

2076  夹角有多大(题目已修改,注意读题)

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int main(){
 5     int n;
 6     double h,m,s,anh,anm,an;
 7     while(~scanf("%d",&n)){
 8         while(n--){
 9             scanf("%lf %lf %lf",&h,&m,&s);
10             if(h>11){h = h-12;}
11             anh = (h+(m+s/60)/60)*30;
12             anm = (m+s/60)*6;
13             an = fabs(anh - anm);
14             if(an>180){an = 360 -an;}
15             printf("%d\n",(int)an);
16         }
17     }
18 
19 }

 

2077  汉诺塔IV

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int main(){
 5     int n,i,m;
 6     _int64 s[21];
 7     s[0] = 0;
 8     s[1] = 1;
 9     for(i=2;i<21;i++){
10         s[i] = s[i-1]*3 + 1;
11     }
12     while(~scanf("%d",&n)){
13         while(n--){
14             scanf("%d",&m);
15             printf("%I64d\n",s[m-1]*2+2);
16         }
17     }
18     
19 }

2078  复习时间

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int main(){
 5     int t,n,m,s[45],i,j,temp,min;
 6     while(~scanf("%d",&t)){
 7         while(t--){
 8             scanf("%d %d",&n,&m);
 9             for(i=1;i<=n;i++){
10                 scanf("%d",&s[i]);
11             }
12             for(i=1;i<=n;i++){
13                 for(j=i+1;j<=n;j++){
14                     if(s[i]<s[j]){
15                         temp = s[i];
16                         s[i] = s[j];
17                         s[j] = temp;
18                     }
19                 }
20             }
21             
22             printf("%d\n",(100-s[n])*(100-s[n]));
23         }
24     }
25 }

 

2080  夹角有多大II

 1 #include<stdio.h>
 2 #include<math.h>
 3 #define PI 3.1415926
 4 
 5 int main(){
 6     int n;
 7     double x1,x2,y1,y2,m,t;
 8     while(~scanf("%d",&n)){
 9         while(n--){
10             scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
11             m = x1*x2 + y1*y2;
12             t = sqrt((x1*x1+y1*y1)*(x2*x2+y2*y2));
13             printf("%.2lf\n",acos(m/t)/PI*180);
14         }
15     }
16 }

抄公式就完事了

 

2083   简易版之最短距离

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int main(){
 5     int n,m,i,j,s[501],temp,d;
 6     while(~scanf("%d",&n)){
 7         while(n--){
 8             scanf("%d",&m);
 9             for(i=0;i<m;i++){
10                 scanf("%d",&s[i]);
11             }
12             for(i=0;i<m;i++){
13                 for(j=i;j<m;j++){
14                     if(s[i]>s[j]){
15                         temp = s[i];
16                         s[i] = s[j];
17                         s[j] = temp;
18                     }
19                 }
20             }
21             d = 0;
22             for(i=0;i<m;i++){
23                 d += abs(s[i] - s[m/2]);
24             }
25             printf("%d\n",d);
26         }
27     }
28 }

 

2084   数塔

 1 #include<stdio.h>
 2 int max(int a,int b){
 3     if(a>b){return a;}
 4     else{return b;}
 5 }
 6 
 7 int main(){
 8     int s[101][101];
 9     int dp[101][101];
10     int c,n,i,j;
11     while(~scanf("%d",&c)){
12         while(c--){
13             scanf("%d",&n);
14             for(i=1;i<=n;i++){
15                 for(j=1;j<=i;j++){
16                     scanf("%d",&s[i][j]);
17                 }
18             }
19             for(i=n;i>0;i--){
20                 for(j=1;j<=i;j++){
21                     if(i==n){
22                         dp[i][j] = s[i][j];
23                     }else{
24                         dp[i][j] = max(s[i][j]+dp[i+1][j],s[i][j]+dp[i+1][j+1]);
25                     }
26                 }
27             }
28             printf("%d\n",dp[1][1]);
29         }
30     }
31 }

 

2085   核反应堆

 1 #include<stdio.h>
 2 
 3 int main(){
 4     int n,i;
 5     _int64 h[35],l[35];
 6     h[0] = 1;l[0]=0;
 7     while(~scanf("%d",&n)){
 8         if(n==-1){break;}
 9         for(i=1;i<=n;i++){
10             h[i] = h[i-1]*3 + l[i-1]*2;
11             l[i] = h[i-1] + l[i-1];
12         }
13         printf("%I64d, %I64d\n",h[n],l[n]);
14     }
15 
16 }

 

posted @ 2019-03-12 20:43  Ragd0ll  阅读(545)  评论(0编辑  收藏  举报