zoukankan      html  css  js  c++  java
  • 8-11-Exercise

    链接:第四次小练

    A.POJ 3094   Quicksum

    水题中的水题啊~

    直接上代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 char a[300];
     7 
     8 int main()
     9 {
    10     while(1)
    11     {
    12         memset(a,0,sizeof(a));
    13         gets(a);
    14         if(a[0]=='#') break;
    15         int i,j,sum=0,k;
    16         int n=strlen(a);
    17         for(i=0;i<n;i++)
    18         {
    19             k=a[i]-'A'+1;
    20             if(a[i]==' ') k=0;
    21             sum+=k*(i+1);
    22         }
    23         printf("%d
    ",sum);
    24     }
    25     return 0;
    26 }
    View Code

    //memory:160KB  time:0ms

    B.HDU 1175   连连看

    与以前那道逃离迷宫其实很像..................这道题中采用的是先往一个方向走,到没有路了,换一个方向的时候,就是转弯的时候,记录转弯次数~

    代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 class Node
     7 {
     8 public:
     9     int x,y,turn;
    10 }q[1000024];
    11 
    12 int n,m,a[1010][1010],x1,x2,y1,y2,add[4][2]={{0,1},{0,-1},{1,0},{-1,0}},hash[1010][1010];
    13 
    14 int inline push(int x,int y,int turn,int end)
    15 {
    16     Node t;
    17     t.x=x;
    18     t.y=y;
    19     t.turn=turn;
    20     q[end++]=t;
    21     return end;
    22 }
    23 
    24 bool inline judge(int x,int y)            //判断该点是否能走......
    25 {
    26     if(x<=n && x>0 && y<=m && y>0 && a[x][y]==0)
    27         return true;
    28     else return false;
    29 }
    30 
    31 bool inline bfs(int x,int y)
    32 {
    33     memset(hash,0,sizeof(hash));
    34     int f=0,end=0;
    35     end=push(x,y,-1,end);
    36     hash[x][y]=1;
    37     while(f<end)
    38     {
    39         if(q[f].turn>=2) return false;
    40         for(int i=0;i<4;i++)
    41         {
    42             int dx=q[f].x+add[i][0];
    43             int dy=q[f].y+add[i][1];
    44             int turn=q[f].turn+1;
    45             while(judge(dx,dy)||(dx==x2 && dy==y2))
    46             {
    47                 if(dx==x2 && dy==y2 && a[dx][dy]==a[x][y])
    48                     return true;
    49                 if(!hash[dx][dy])
    50                 {
    51                     hash[dx][dy]=1;
    52                     end=push(dx,dy,turn,end);
    53                 }
    54                 dx+=add[i][0];                 //在往该方向还能走的时候,继续往该方向走~
    55                 dy+=add[i][1];
    56             }
    57 
    58         }
    59         f++;
    60     }
    61     return false;
    62 }
    63 
    64 int main()
    65 {
    66     while(scanf("%d%d",&n,&m),n,m)
    67     {
    68         for(int i=1;i<=n;i++)
    69             for(int j=1;j<=m;j++)
    70                 scanf("%d",&a[i][j]);
    71         int k;
    72         scanf("%d",&k);
    73         while(k--)
    74         {
    75             scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    76             if(a[x1][y1]==0 || a[x2][y2]==0 || a[x1][y1]!=a[x2][y2]) {printf("NO
    ");continue;}
    77             if(bfs(x1,y1))
    78                 printf("YES
    ");
    79             else
    80                 printf("NO
    ");
    81         }
    82     }
    83     return 0;
    84 }

    //memory:8308KB   time:3562ms

    C.HDU 1166   敌兵布阵

    其实......哎这道题做过╮(╯▽╰)╭......链接→_→

    代码如下:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 const int MAX=55555;
     7 int a[MAX<<2];
     8 
     9 void build(int l,int r,int x)
    10 {
    11     if(l==r)
    12     {
    13         scanf("%d",&a[x]);
    14         return;
    15     }
    16     int mid=(l+r)>>1;
    17     build(l,mid,x<<1);
    18     build(mid+1,r,x<<1|1);
    19     a[x]=a[x<<1]+a[x<<1|1];
    20 }
    21 
    22 void update(int p,int w,int l,int r,int x)
    23 {
    24     if(l==r)
    25     {
    26         a[x]+=w;
    27         return;
    28     }
    29     int mid=(l+r)>>1;
    30     if(p<=mid) update(p,w,l,mid,x<<1);
    31     else
    32         update(p,w,mid+1,r,x<<1|1);
    33     a[x]=a[x<<1]+a[x<<1|1];
    34 }
    35 
    36 int query(int le,int ri,int l,int r,int x)
    37 {
    38     if(le<=l && ri>=r)
    39         return a[x];
    40     int mid=(l+r)>>1,re=0;
    41     if(le<=mid) re+=query(le,ri,l,mid,x<<1);
    42     if(ri>mid) re+=query(le,ri,mid+1,r,x<<1|1);
    43     return re;
    44 }
    45 
    46 int main()
    47 {
    48     int t,n,cas=0;
    49     char str[10];
    50     scanf("%d",&t);
    51     while(t--)
    52     {
    53         printf("Case %d:
    ",++cas);
    54         scanf("%d",&n);
    55         build(1,n,1);
    56         while(1)
    57         {
    58             scanf("%s",str);
    59             if(str[0]=='E') break;
    60             int a,b;
    61             scanf("%d%d",&a,&b);
    62             if(str[0]=='Q') printf("%d
    ",query(a,b,1,n,1));
    63             else
    64                 if(str[0]=='S') update(a,-b,1,n,1);
    65             else
    66                 update(a,b,1,n,1);
    67         }
    68     }
    69     return 0;
    70 }
    View Code

    //memory:768KB  time:218ms

    D.HDU 2602   Bone Collector

    很水~DP

    代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 int w[1111],v[1111],f[43333];
     7 
     8 int main()
     9 {
    10     int t,N,V,i,j;
    11     scanf("%d",&t);
    12     while(t--)
    13     {
    14         memset(f,0,sizeof(f));
    15         memset(w,0,sizeof(w));
    16         memset(v,0,sizeof(v));
    17         scanf("%d%d",&N,&V);
    18         for(i=1;i<=N;i++)
    19             scanf("%d",&v[i]);
    20         for(i=1;i<=N;i++)
    21             scanf("%d",&w[i]);
    22         for(i=1;i<=N;i++)
    23             for(j=V;j>=w[i];j--)
    24             {
    25                 int temp=f[j-w[i]]+v[i];
    26                 f[j]=max(f[j],temp);
    27             }
    28         printf("%d
    ",f[V]);
    29     }
    30     return 0;
    31 }

    //memory:428KB  time:15ms

    E.HDU 2059   龟兔赛跑

    DP

    代码:

     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <float.h>
     4 using namespace std;
     5 
     6 #define MAX 110
     7 int a[MAX];
     8 double dp[MAX];
     9 
    10 int main()
    11 {
    12     int l,n,c,t,vr,v1,v2;
    13     while(~scanf("%d%d%d%d%d%d%d",&l,&n,&c,&t,&vr,&v1,&v2))
    14     {
    15         for(int i=1;i<=n;i++)
    16             scanf("%d",&a[i]);
    17         a[0]=0;
    18         dp[0]=0.0;
    19         a[n+1]=l;
    20         for(int i=1;i<=n+1;i++)
    21         {
    22             dp[i]=DBL_MAX;
    23             for(int j=0;j<i;j++)
    24             {
    25                 double len=1.0*(a[i]-a[j]);
    26                 double temp=(len>=c)?((c*1.0)/v1+(len-c)*1.0/v2):((len*1.0)/v1);
    27                 if(j) temp+=t;
    28                 dp[i]=min(dp[i],dp[j]+temp);
    29             }
    30         }
    31         double rabit_time=(l*1.0)/vr;
    32         if(dp[n+1]>rabit_time)
    33             printf("Good job,rabbit!
    ");
    34         else
    35             printf("What a pity rabbit!
    ");
    36     }
    37     return 0;
    38 }

    //memory:284KB  time:15ms

  • 相关阅读:
    执行上下文和作用域,作用域链
    学习笔记一:定位
    exports和module.exports的区别——学习笔记
    伪类和伪元素
    visibility和display
    CSS选择器,层叠
    Servlet乱码处理-------续集
    Servlet的乱码处理手记
    前端框架之Semantic UI
    最完整的Oracle11g 概述
  • 原文地址:https://www.cnblogs.com/teilawll/p/3252282.html
Copyright © 2011-2022 走看看