zoukankan      html  css  js  c++  java
  • hdu4772 水模拟

    题意:
          给你两个矩阵,问你两个矩阵的最大相同元素个数(位置也要求相同),矩阵可以90旋转多次。

    思路:
          水题,直接模拟就行了,方法很多,可以直接写坐标关系,或者一层一层处理,就是一层一层往里拿出来,比较就行了,两个都写了。


    直接交换
    #include<stdio.h>


    int A[32][32] ,B[32][32] ,C[32][32];


    void swap(int n)
    {
       for(int i = 1 ;i <= n ;i ++)
       for(int j = 1 ;j <= n ;j ++)
       C[i][j] = A[j][n-i+1];
       for(int i = 1 ;i <= n ;i ++)
       for(int j = 1 ;j <= n ;j ++)
       A[i][j] = C[i][j];
    }


    int main ()
    {
       int n ,i ,j ,ans;
       while(~scanf("%d" ,&n) && n)
       {
          for(i = 1 ;i <= n ;i ++)
          for(j = 1 ;j <= n ;j ++)
          scanf("%d" ,&A[i][j]);
          for(i = 1 ;i <= n ;i ++)
          for(j = 1 ;j <= n ;j ++)
          scanf("%d" ,&B[i][j]);
          int ans = 0;
          for(int c = 1 ;c <= 4 ;c ++)
          {
             int sum = 0;
             for(i = 1 ;i <= n ;i ++)
             for(j = 1 ;j <= n ;j ++)
             if(A[i][j] == B[i][j]) sum ++;
             if(ans < sum) ans = sum;
             swap(n);
          }
          printf("%d " ,ans);
       }
       return 0;
    }


    一层一层比较


    #include<stdio.h>


    int get_len(int c ,int n ,int A[32][32] ,int C[])
    {
       int tmp = 0 ,i;
       for(i = c ;i <= n - c + 1 ;i ++)
       C[++tmp] = A[c][i];
       for(i = c + 1 ;i <= n - c + 1 ;i ++)
       C[++tmp] = A[i][n - c + 1];
       for(i = n - c + 1 - 1 ;i >= c ;i --)
       C[++tmp] = A[n - c + 1][i];
       for(i = n - c + 1 - 1 ;i >= c + 1 ;i --)
       C[++tmp] = A[i][c];
       return tmp;
    }




    int main ()
    {
       int A[32][32] ,B[32][32] ,C[1000] ,D[1000];
       int i ,j ,n;
       int sum[5];
       while(~scanf("%d" ,&n) && n)
       {
          for(i = 1 ;i <= n ;i ++)
          for(j = 1 ;j <= n ;j ++)
          scanf("%d" ,&A[i][j]);
          for(i = 1 ;i <= n ;i ++)
          for(j = 1 ;j <= n ;j ++)
          scanf("%d" ,&B[i][j]);
          sum[1] = sum[2] = sum[3] = sum[4] = 0;
          for(int c = 1 ;c <= (n + 1) / 2 ;c ++)
          {
              int tmp1 = get_len(c ,n ,A ,C);
              int tmp2 = get_len(c ,n ,B ,D);
              for(i = 1 ;i <= 4 ;i ++)
              {
                  for(j = 1 ;j <= tmp1 ;j ++)
                  {
                     int now = j + (n - c + 1 - c) * (i - 1);
                     if(now > tmp1) now -= tmp1;
                     if(C[now] == D[j]) sum[i] ++;
                  }           
             }
          }
          int ans = 0;
          for(i = 1 ;i <= 4 ;i ++)
          if(ans < sum[i]) ans = sum[i];
          printf("%d " ,ans);
       }
       return 0;
    }
              
              
             
              
              
              
              
        
              
                
             
       



  • 相关阅读:
    Apache Ant 1.9.1 版发布
    Apache Subversion 1.8.0rc2 发布
    GNU Gatekeeper 3.3 发布,网关守护管理
    Jekyll 1.0 发布,Ruby 的静态网站生成器
    R语言 3.0.1 源码已经提交到 Github
    SymmetricDS 3.4.0 发布,数据同步和复制
    beego 0.6.0 版本发布,Go 应用框架
    Doxygen 1.8.4 发布,文档生成工具
    SunshineCRM 20130518发布,附带更新说明
    Semplice Linux 4 发布,轻量级发行版
  • 原文地址:https://www.cnblogs.com/csnd/p/12062920.html
Copyright © 2011-2022 走看看