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

    8-18-小练

    A.HDU 1172   猜数字

    采用枚举~【赤果果的暴力~】

    代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 int x[111],y[111],s,ss,vis[4],dis[4];
     7 char a[111][5];
     8 
     9 void find(int b,int c)
    10 {
    11     if(b==(a[c][0]-'0') && !vis[0])
    12     {
    13         s++;vis[0]=1;
    14         return;
    15     }
    16     if(b==(a[c][1]-'0') && !vis[1])
    17     {
    18         s++;vis[1]=1;
    19         return;
    20     }
    21     if(b==(a[c][2]-'0') && !vis[2])
    22     {
    23         s++;vis[2]=1;
    24         return;
    25     }
    26     if(b==(a[c][3]-'0') && !vis[3])
    27     {
    28         s++;vis[3]=1;
    29         return;
    30     }
    31 }
    32 
    33 int main()
    34 {
    35     int n,i,j,A,B,C,D,AA,BB,CC,DD;
    36     while(scanf("%d",&n),n)
    37     {
    38         for(i=0;i<n;i++)
    39             scanf("%s%d%d",a[i],&x[i],&y[i]);
    40         int sum=0;
    41         for(i=1000;i<=9999;i++)
    42         {
    43             D=i%10;
    44             C=(i/10)%10;
    45             B=(i/100)%10;
    46             A=i/1000;
    47             int k=0;
    48             for(j=0;j<n;j++)
    49             {
    50                 s=0,ss=0;
    51                 memset(vis,0,sizeof(vis));
    52                 memset(dis,0,sizeof(dis));
    53                 if(A==a[j][0]-'0') {ss++;s++;vis[0]=1;dis[0]=1;}
    54                 if(B==a[j][1]-'0') {ss++;s++;vis[1]=1;dis[1]=1;}
    55                 if(C==a[j][2]-'0') {ss++;s++;vis[2]=1;dis[2]=1;}
    56                 if(D==a[j][3]-'0') {ss++;s++;vis[3]=1;dis[3]=1;}
    57                 if(ss!=y[j]) break;
    58                 if(!dis[0])  find(A,j);
    59                 if(!dis[1])  find(B,j);
    60                 if(!dis[2])  find(C,j);
    61                 if(!dis[3])  find(D,j);
    62                 if(s!=x[j]) break;
    63                 k++;
    64             }
    65             if(k==n)
    66             {
    67                 sum++;
    68                 if(sum==2) break;
    69                 AA=A;BB=B;CC=C;DD=D;
    70             }
    71         }
    72         if(sum!=1) printf("Not sure
    ");
    73         else
    74             printf("%d%d%d%d
    ",AA,BB,CC,DD);
    75     }
    76     return 0;
    77 }

    B.HDU 2112     HDU Today

    就是字符串处理麻烦了点~将字符串编号+Dijkstra就可以了~

    代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 #define inf 0x3f3f3f3f        //手抽~最开始把inf写的太大了,结果超int了......= =
     7 int map[160][160],vis[160],n,m,s,e;
     8 long dis[160];
     9 char name[160][32];
    10 
    11 void dijkstra()
    12 {
    13     memset(vis,0,sizeof(vis));
    14     memset(dis,inf,sizeof(dis));
    15     dis[s]=0;
    16     for(int i=1;i<=m;i++)
    17     {
    18         int x,minn=inf;
    19         for(int j=1;j<=m;j++)
    20             if(!vis[j] && dis[j]<minn)
    21             {
    22                 minn=dis[j];
    23                 x=j;
    24             }
    25         vis[x]=1;
    26         for(int y=1;y<=m;y++)
    27             dis[y]=min(dis[y],map[x][y]+dis[x]);
    28     }
    29     return;
    30 }
    31 
    32 int find(char str[32])
    33 {
    34     int i;
    35     for(i=1;i<=m;i++)
    36         if(strcmp(name[i],str)==0)
    37             return i;
    38     if(m==0 || i>m)
    39     {
    40         m++;
    41         strcpy(name[m],str);
    42         return m;
    43     }
    44 }
    45 
    46 int main()
    47 {
    48     while(scanf("%d",&n)!=EOF)
    49     {
    50         if(n==-1) break;
    51         char start[32],end[32],s1[32],s2[32];
    52         int i,j,a,b,c;
    53         scanf("%s%s",start,end);
    54         memset(map,inf,sizeof(map));
    55         m=0;
    56         for(i=1;i<=n;i++)
    57         {
    58             scanf("%s%s%d",s1,s2,&c);
    59             a=find(s1);
    60             b=find(s2);
    61             if(map[a][b]>c)
    62                 map[a][b]=map[b][a]=c;
    63         }
    64         s=find(start);
    65         e=find(end);
    66         if(s==e) printf("0
    ");
    67         else
    68         {
    69             dijkstra();
    70             if(dis[e]!=inf)
    71                 printf("%ld
    ",dis[e]);
    72             else
    73                 printf("-1
    ");
    74         }
    75     }
    76     return 0;
    77 }

    //memory:396KB     time:687ms

    C.POJ 1321      棋盘问题

    dfs~还有就是要注意当K<n 时~

    代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 bool chess[9][9],vis[9];
     7 int ans,n,k;
     8 
     9 void dfs(int row,int num)
    10 {
    11     if(num==k){ans++;return;}
    12     if(row>=n) return;
    13     for(int i=0;i<n;i++)
    14         if(!vis[i] && chess[row][i])
    15     {
    16         vis[i]=true;
    17         dfs(row+1,num+1);
    18         vis[i]=false;
    19     }
    20     dfs(row+1,num);                    //这一步很重要~
    21     return;
    22 }
    23 
    24 int main()
    25 {
    26     while(~scanf("%d%d",&n,&k))
    27     {
    28         if(n==-1 && k==-1) break;
    29         int i,j;
    30         memset(chess,false,sizeof(chess));
    31         for(i=0;i<n;i++)
    32             for(j=0;j<n;j++)
    33         {
    34             char c;
    35             cin>>c;
    36             if(c=='#')
    37                 chess[i][j]=true;
    38         }
    39         ans=0;
    40         dfs(0,0);
    41         printf("%d
    ",ans);
    42     }
    43     return 0;
    44 }

    //memory:708KB    time:32ms

    E.POJ 3006      Dirichlet's Theorem on Arithmetic Progressions

    呃.......就是暴力啦.......

    代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 using namespace std;
     6 
     7 bool juge(int x)
     8 {
     9     for(int i=2;i*i<=x;i++)
    10         if(x%i==0) return false;
    11     return true;
    12 }
    13 
    14 int main()
    15 {
    16     int a,b,n,i,j;
    17     while(scanf("%d%d%d",&a,&b,&n),a,b,n)
    18     {
    19         int k=0,sum=0;
    20         for(i=0;;i++)
    21         {
    22             sum=a+i*b;
    23             if(sum>1 && juge(sum))
    24                 k++;
    25             if(k==n) break;
    26         }
    27         printf("%d
    ",sum);
    28     }
    29     return 0;
    30 }
    View Code

    //memory:164KB     time:250ms

  • 相关阅读:
    C++中求类的大小
    BP神经网络
    感知机
    static和const关键字
    C++随笔(2)
    React表单元素的使用
    React可控组件与不可控组件
    React组件-mixin
    React-组件嵌套-子组件通过委托向父组件传值
    React事件属性
  • 原文地址:https://www.cnblogs.com/teilawll/p/3268911.html
Copyright © 2011-2022 走看看