• 8月11号小练


    网站:CSUST 训练4

    A  Quicksum    POJ 3094

    水题,不解释

    代码:  0ms

     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <string.h>
     4 using namespace std;
     5 int d[26]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26};
     6 int main()
     7 {
     8     char a[300];
     9     int c,i,sum,len;
    10     while(gets(a)&&strcmp(a,"#")!=0)
    11     {
    12         sum=0;
    13         len=strlen(a);
    14         for(i=0;i<len;i++)
    15         {
    16             if(a[i]==' ')
    17                 continue;
    18             c=(int)a[i];
    19             sum+=d[c-65]*(i+1);
    20         }
    21         printf("%d
    ",sum);
    22     }
    23     return 0;
    24 }
    View Code

    B   搜索,和以前的逃离迷宫很像,判断转弯的个数  连连看    HDU 1175

    先把代码放着    2671ms/10000ms

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 struct T
     5 {
     6    int x,y,turn;
     7 }q[1000024];
     8 int map[1024][1024],n,m,k;
     9 int d[4][2]={ 0,1,1,0,0,-1,-1,0  };
    10 int hash[1024][1024];
    11 int inline push( const int x,const int y,const int turn,int end )
    12 {
    13     T t;
    14     t.x=x;t.y=y;
    15     t.turn=turn;
    16     q[ end++ ] = t;
    17     return end;    
    18 }
    19 bool inline judge( int x,int y )       //判断
    20 {
    21    if( x>n||x<=0||y>m||y<=0 ) 
    22      return false;
    23    else if( map[x][y]==0 )
    24          return true;
    25         else return false;    
    26 }
    27 bool inline BFS( int X1,int Y1,int X2,int Y2 )
    28 {
    29     memset( hash,0,sizeof( hash ) );
    30     int first=0,end=0;
    31     end=push( X1, Y1, -1, end );  //存点
    32     hash[X1][Y1]=1;    //标记
    33     while( first< end )
    34     {
    35         if( q[first].turn>=2 )  
    36            return false;
    37         for( int i=0;i<4; i++ )
    38         {
    39            int dx=q[first].x + d[i][0];
    40            int dy=q[first].y + d[i][1];
    41            int turn=q[first].turn + 1;       //转弯+1
    42            while( judge( dx,dy )||( dx==X2 && dy == Y2 ) ) 
    43            {
    44                 if( dx==X2 && dy == Y2 && map[dx][dy]==map[X1][Y1])     //满足条件 
    45                     return true;
    46                 if( !hash[dx][dy] ) 
    47                 {
    48                   hash[dx][dy]=1;
    49                   end = push( dx,dy,turn,end );       
    50                  }
    51                 dx += d[i][0];   //直走
    52                 dy += d[i][1]; 
    53            }    
    54         }
    55         first++;       
    56     }
    57     return false;     
    58 }
    59 int main()
    60 { 
    61    int x,X1,Y1,X2,Y2;
    62    while( scanf( "%d%d",&n,&m ),n||m )
    63   { 
    64       for( int i=1;i<=n;i++ )
    65         for( int j=1;j<=m;j++ )
    66             scanf( "%d",&map[i][j] );
    67        scanf( "%d",&x );
    68       for( int i=0;i<x; i++ )
    69       {
    70           scanf( "%d%d%d%d",&X1,&Y1,&X2,&Y2 );
    71           if( X1==X2&&Y1==Y2 )   //同一点
    72             printf( "NO
    " ); 
    73           else
    74           {
    75               if( map[X1][Y1]!=0&&map[X1][Y1]==map[X2][Y2]&&BFS( X1,Y1,X2,Y2 ) )
    76                 printf( "YES
    " ) ;
    77               else printf( "NO
    " );  
    78          }  
    79       }   
    80    }
    81    return 0;    
    82 }

    敌兵布阵   HDU 1166  可用线段树,树状数组,我是用树状数组做的。

    代码:156MS

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 using namespace std;
     5 int n, a[50005];
     6 char b[6];
     7 void update(int i,int val)
     8 {
     9     while(i<= n)
    10     {
    11         a[i]+=val;
    12         i+=i&(-i);
    13     }
    14 }
    15 int sum(int i)
    16 {
    17     int s=0;
    18     while(i>0)
    19     {
    20         s+=a[i];
    21         i-=i&(-i);
    22     }
    23     return s;
    24 }
    25 int main()
    26 {
    27     int i, val, t, x, y, w= 1;
    28     scanf("%d", &t);
    29     while(t--)
    30     {
    31         memset(a, 0, sizeof(a));
    32         scanf("%d", &n);
    33         for(i=1; i<=n;i++)
    34         {
    35             scanf("%d",&val);
    36             update(i,val);
    37         }
    38         printf("Case %d:
    ",w++);
    39         while(scanf("%s",b))
    40         {
    41             if(b[0]=='E')
    42                 break;
    43             scanf("%d%d",&x,&y);
    44             if(b[0]=='A')
    45                 update(x,y);
    46             else if(b[0]=='S')
    47                 update(x,-y);
    48             else
    49             printf("%d
    ",sum(y)-sum(x-1));
    50         }
    51     }
    52     return 0;
    53 }

    D  Bone Collector    HDU 2602  背包基础

     1 #include<iostream>
     2 #include<string.h>
     3 #include<stdio.h>
     4 using namespace std;
     5 int main()
     6 {
     7     int x[1005], y[1005],c,dp[100050],m,n,i,k;
     8     scanf("%d",&c);
     9     while(c--)
    10     {
    11         memset(dp, 0, sizeof(dp));
    12         scanf("%d%d",&n,&m);
    13         for(i=0; i<n; i++)
    14             scanf("%d",&y[i]);
    15         for(i=0; i<n; i++)
    16             scanf("%d",&x[i]);
    17         for(i=0; i<n; i++)
    18                 for(k=m; k>=x[i]; k--)
    19                     dp[k]=max(dp[k],dp[k-x[i]]+y[i]);
    20         printf("%d
    ",dp[m]);
    21     }
    22     return 0;
    23 }

    E  龟兔赛跑   HDU 2059  神题Orz   DP

    代码:   15ms

     1 #include <stdio.h>
     2 #include <iostream>
     3 using namespace std;
     4 int main()
     5 {
     6   int n,i,j;
     7   double L,l,t,v1,v2,v3,dp[105],time,minn,p[105];
     8   while(~scanf("%lf",&L))
     9   {
    10     scanf("%d%lf%lf%lf%lf%lf",&n,&l,&t,&v1,&v2,&v3);
    11     for(i=1;i<=n;i++)
    12       scanf("%lf",&p[i]);
    13     p[0]=0;
    14     p[i]=L;
    15     for(i=1;i<=n+1;i++)
    16       dp[i]=999999999.0;    //初始化为无穷大
    17     dp[0]=0;;
    18     for(i=1;i<=n+1;i++)
    19       for(j=0;j<=i-1;j++)
    20       {
    21         if(p[i]-p[j]<=l)
    22           time=t+(p[i]-p[j])/v2;
    23         else
    24           time=l/v2+(p[i]-p[j]-l)/v3+t;
    25         if(j==0)
    26           time-=t;
    27         minn=dp[j]+min(time,(p[i]-p[j])/v3);
    28         dp[i]=min(dp[i],minn);
    29       }
    30       if(dp[n+1]<L/v1*1.0)
    31         printf("What a pity rabbit!
    ");
    32       else
    33         printf("Good job,rabbit!
    ");
    34   }
    35   return 0;
    36 }
  • 相关阅读:
    编程这几天出现的很2的问题!!!
    2020 8 1 每日总结
    2020 8 6 每日总结
    2020 8 7 读后感
    2020 8 4 每日总结
    2020 7 30 每日总结
    2020 8 3 每日总结
    2020 8 8 每日总结
    2020 8 2 每周总结
    2020 8 5 每日总结
  • 原文地址:https://www.cnblogs.com/riddle/p/3253918.html
Copyright © 2020-2023  润新知