zoukankan      html  css  js  c++  java
  • hdu 4951 乘法表

    http://acm.hdu.edu.cn/showproblem.php?pid=4951

    依照我原先的想法是 先找出ans[0] 和ans[1]来,这个好找吧,要是有一行全部是相等的数组成那这行的序号就是ans[0], 要是有一[i,j],i*j=ans[0] i ,那么ans[j]=1,  找到了ans[0]和ans[1] ,然后根据已知的遍历推算出其他的结果。

      1 #include<iostream>
      2 #include<cstdio>
      3 #include<map>
      4 #include<algorithm>
      5 #include<cstring>
      6 using namespace std;
      7 
      8 struct node
      9 {
     10     int x,y,zhi;
     11 } p[505][505];
     12 
     13 bool vis[505];
     14 int ans[505];
     15 
     16 int get(int x,int y,int c)
     17 {
     18     int w[505],num=0;
     19     do
     20     {
     21         w[num++]=y%10;
     22         y/=10;
     23     }
     24     while(y);
     25 
     26     do
     27     {
     28         w[num++]=x%10;
     29         x/=10;
     30     }
     31     while(x);
     32 
     33     int sum=0;
     34     for(int i=0,jie=1; i<num; i++)
     35     {
     36         sum+=w[i]*jie;
     37         jie*=c;
     38     }
     39     return sum;
     40 }
     41 
     42 void solve(int n)
     43 {
     44     int count1=2,coun=1;
     45     while(1)
     46     {
     47         for(int i=0; i<n; i++)
     48             for(int j=0; j<n; j++)
     49             {
     50 
     51                 if(vis[p[i][j].x]&&vis[p[i][j].y])
     52                 {
     53                     if(p[i][j].zhi==-1)
     54                         p[i][j].zhi=get(ans[p[i][j].x],ans[p[i][j].y],n);
     55                     if(p[i][j].zhi!=0)
     56                     {
     57                         if(vis[i]&&!vis[j])
     58                         {
     59                             ans[j]=p[i][j].zhi/ans[i];
     60                             vis[j]=true;
     61                             count1++;
     62                         }
     63                         else if(!vis[i]&&vis[j])
     64                         {
     65 
     66                             ans[i]=p[i][j].zhi/ans[j];
     67                             vis[i]=true;
     68                             count1++;
     69                         }
     70                         else if(!vis[i]&&i==j)
     71                         {
     72 
     73                             ans[i]=p[i][j].zhi/2;
     74                             vis[i]=true;
     75                             count1++;
     76                         }
     77                         if(count1>=n)
     78                             return ;
     79                     }
     80                 }
     81             }
     82     }
     83 }
     84 
     85 int main()
     86 {
     87     int n,i,j,a,b,c;
     88     for(int i=0;i<55;i++)
     89         {
     90             scanf("%d%d%d",&a,&b,&c);
     91             printf("get  %d
    ",get(a,b,c));
     92         }
     93 
     94     while(~scanf("%d",&n),n)
     95     {
     96         memset(vis,false,sizeof(vis));
     97         for( i=0; i<n; i++)
     98             for( j=0; j<n; j++)
     99             {
    100                 scanf("%d%d",&p[i][j].x,&p[i][j].y);
    101                 p[i][j].zhi=-1;
    102             }
    103         for( i=0; i<n; i++)
    104         {
    105             for( j=0; j<n; j++)
    106                 if(p[i][j].x!=p[i][j].y)
    107                     break;
    108             if(j==n)
    109             {
    110                 ans[p[i][0].x]=0;
    111                 vis[p[i][0].x]=true;
    112                 break;
    113             }
    114         }
    115 
    116         for( i=0; i<n; i++)
    117         {
    118             for( j=0; j<n; j++)
    119                 if(!vis[i]&&!vis[j]&&ans[p[i][j].x]==0&&i*j==p[i][j].y)
    120                 {
    121                     if(i==p[i][j].y)
    122                     {
    123                         ans[j]=1;
    124                         vis[j]=true;
    125                     }
    126                     else
    127                     {
    128                         ans[i]=1;
    129                         vis[i]=true;
    130                     }
    131                     break;
    132                 }
    133             if(j!=n)
    134                 break;
    135         }
    136 
    137         solve(n);
    138         for( i=0; i<n; i++)
    139             printf("%d ",ans[i]);
    140         printf("
    ");
    141 
    142     }
    143     return 0;
    144 }

    上面的结果当然是错的, 起码每次找p[i][j].zhi 的时候就必须得用大数    = =

    在网上看到一个很简洁的思路 膜拜一下~ 

    http://www.cnblogs.com/yuiffy/p/3914595.html

     1 #include <stdio.h>
     2 #include<iostream>
     3 #include <string.h>
     4 #include <algorithm>
     5 using namespace std;
     6 int a[505][1005],ans[505];
     7 bool vis[505];
     8 
     9 int main()
    10 {
    11     int i,j,n,cas=1;
    12     while(~scanf("%d",&n),n)
    13     {
    14         for(i=0;i<n;i++)
    15             for( j=0;j<2*n;j+=2)
    16                 scanf("%d%d",&a[i][j],&a[i][j+1]);
    17         for(i=0;i<n;i++)
    18         {
    19             for(j=0;j<2*n;j+=2)
    20                  if(a[i][j]!=a[i][j+1])
    21                      break;
    22            if(j>=2*n)
    23            {
    24                ans[0]=i;
    25 
    26                break;
    27            }
    28         }
    29         for(i=0;i<n;i++)
    30         {
    31             if(i==ans[0])
    32                 continue;
    33             memset(vis,false,sizeof(vis));
    34             int num=0;
    35             for(j=0;j<2*n;j+=2)
    36             {
    37                 if(vis[a[i][j]]==false)
    38                 {
    39                     vis[a[i][j]]=true;
    40                     num++;
    41                 }
    42             }
    43             ans[num]=i;
    44         }
    45         printf("Case #%d: %d",cas++,ans[0]);
    46         for(int i=1;i<n;i++)
    47             printf(" %d",ans[i]);
    48         printf("
    ");
    49     }
    50     return 0;
    51 }
  • 相关阅读:
    织梦调用所有栏目一级二级三级和无限级栏目输出
    织梦添加自定义独立模型缩略图字段官方的一个BUG
    织梦搜索结果增加dede:type、dede:arclist、dede:channelartlist、dede:tag等标签支持
    织梦搜索指定多个栏目的文档
    POJ 1001
    #207 Div.2 B. Flag Day
    sublime Text 2 配置 C++ 编译环境
    1011. 复数类
    1008. 二哥买期货
    MySQL/mariadb知识点——视图管理语句
  • 原文地址:https://www.cnblogs.com/assult/p/3917880.html
Copyright © 2011-2022 走看看