zoukankan      html  css  js  c++  java
  • 【20190621】幻方

    这是一道细节理解和处理的题目,我们需要建立坐标系,并且将每个视图中的位置正确转化成坐标系中的位置,注意每个视图是从正方体内部看到的。

    为了处理每个位置有哪几种光线,我们可以将三条光线状压为三位二进制数,最后统计即可。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 int n;
     6 // int f[210][210],b[210][210],u[210][210],d[210][210],l[210][210],r[210][210];
     7 int vis[210][210][210],ans;
     8 char now[210];
     9 int main() {
    10     while(scanf("%d",&n)!=EOF) {
    11         memset(vis,0,sizeof(vis));
    12         ans=0; 
    13         for(int i=1;i<=n;i++) {       //line of read              //front
    14             scanf("%s",now+1);
    15             for(int j=1;j<=n;j++)     //row of read
    16                 if(now[j]=='#')
    17                     for(int k=1;k<=n;k++)    //other
    18                         vis[n-j+1][k][n-i+1]|=1;
    19         }
    20         for(int i=1;i<=n;i++) {                           //back
    21             scanf("%s",now+1);
    22             for(int j=1;j<=n;j++)
    23                 if(now[j]=='#')
    24                     for(int k=1;k<=n;k++)
    25                         vis[j][k][n-i+1]|=1;
    26         }
    27         for(int i=1;i<=n;i++) {             //left
    28             scanf("%s",now+1);
    29             for(int j=1;j<=n;j++)
    30                 if(now[j]=='#')
    31                     for(int k=1;k<=n;k++)
    32                         vis[k][j][n-i+1]|=(1<<1);
    33         }
    34         for(int i=1;i<=n;i++) {           //right
    35             scanf("%s",now+1);
    36             for(int j=1;j<=n;j++)
    37                 if(now[j]=='#')
    38                     for(int k=1;k<=n;k++)
    39                         vis[k][n-j+1][n-i+1]|=(1<<1);
    40         }
    41         for(int i=1;i<=n;i++) {     //up
    42             scanf("%s",now+1);
    43             for(int j=1;j<=n;j++)
    44                 if(now[j]=='#')
    45                     for(int k=1;k<=n;k++)
    46                         vis[j][i][k]|=(1<<2);
    47         }
    48         for(int i=1;i<=n;i++) {     //down
    49             scanf("%s",now+1);
    50             for(int j=1;j<=n;j++)
    51                 if(now[j]=='#')
    52                     for(int k=1;k<=n;k++)
    53                         vis[j][n-i+1][k]|=(1<<2);
    54         }
    55         for(int i=1;i<=n;i++)
    56             for(int j=1;j<=n;j++)
    57                 for(int k=1;k<=n;k++)
    58                     if(vis[i][j][k]==7) ans++;
    59         printf("%d
    ",ans); 
    60     }
    61     return 0;
    62 }
    AC Code
  • 相关阅读:
    我在硅谷时候写的文章
    快速上手ABP
    朝花夕拾
    ABP问题速查表
    被低估的.net(上)
    申请Office 365一年免费的开发者账号攻略(2018年10月份版本)
    office365的开发者训练营,免费,在微软广州举办
    数据恢复顾问(DRA)
    使用RMAN对数据文件进行恢复
    Linux环境下利用句柄恢复Oracle误删除的数据文件
  • 原文地址:https://www.cnblogs.com/shl-blog/p/11066557.html
Copyright © 2011-2022 走看看