• ACM-ICPC North America Qualifier 2014 Eight Queens


    题意:问图是否满足八皇后。

    解题思路:hash,dp,位运算

    解题代码:

    我的搓代码。

     1 // File Name: a.cpp
     2 // Author: darkdream
     3 // Created Time: 2015年03月14日 星期六 12时00分44秒
     4 
     5 #include<vector>
     6 #include<list>
     7 #include<map>
     8 #include<set>
     9 #include<deque>
    10 #include<stack>
    11 #include<bitset>
    12 #include<algorithm>
    13 #include<functional>
    14 #include<numeric>
    15 #include<utility>
    16 #include<sstream>
    17 #include<iostream>
    18 #include<iomanip>
    19 #include<cstdio>
    20 #include<cmath>
    21 #include<cstdlib>
    22 #include<cstring>
    23 #include<ctime>
    24 #define LL long long
    25 
    26 using namespace std;
    27 char  str[10][10];
    28 int hsh[10];
    29 int hsl[10];
    30 int hshl[50];
    31 int hslh[50];
    32 int main(){
    33     while(scanf("%s",&str[1][1]) != EOF)
    34     {
    35        for(int i = 2;i <= 8 ;i ++)
    36        {
    37          scanf("%s",&str[i][1]);
    38        }
    39        memset(hsh,0,sizeof(hsh));
    40        memset(hsl,0,sizeof(hsh));
    41        memset(hshl,0,sizeof(hshl));
    42        memset(hslh,0,sizeof(hslh));
    43        int ok = 0 ; 
    44        for(int i= 1;i <= 8;i ++)
    45        {
    46           for(int j = 1;j <= 8 ;j ++)
    47           {
    48               if(str[i][j] == '.')
    49                   continue;
    50               if(hsh[i] == 1)
    51               {
    52                  ok = 1;  
    53               }else{
    54                  hsh[i] = 1 ;
    55               }
    56               
    57               if(hsl[j] == 1)
    58               {
    59                  ok = 1;  
    60               }else{
    61                  hsl[j] = 1 ;
    62               }
    63 
    64               if(hshl[j-i+25] == 1)
    65               {
    66                  ok = 1;  
    67               }else{
    68                  hshl[j-i +25] = 1 ;
    69               }
    70 
    71               if(hslh[j+i] == 1)
    72               {
    73                  ok = 1;  
    74               }else{
    75                  hslh[j+i] = 1 ;
    76               }
    77           }
    78 
    79        }
    80        if(ok == 1 )
    81            printf("invalid
    ");
    82        else printf("valid
    ");
    83     }
    84      
    85     
    86     return 0;
    87 }
    View Code

    然后看到了学弟的位运算代码:

     1 #include <iostream>
     2 #include <vector>
     3 #include <cstdio>
     4 #include <cstring>
     5 using namespace std;
     6 char chess[10][10];
     7 int stu1 = 0, stu2 = 0, flag = 0;
     8 int main() {
     9     for (int i = 0; i < 8; i++)     gets (chess[i]);
    10     for (int i = 0; i < 8; i++) {
    11         for (int j = 0; j < 8; j++)
    12             if (chess[i][j] == '*')
    13                 if (! (stu1 & 1 << j) && ! (stu2 & 1 << j))
    14                         stu1 |= 1 << j, stu2 |= 1 << j;
    15                 else {
    16                     flag = 1;break;
    17                 }
    18         if (flag) break;
    19         stu1 <<= 1, stu2 >>= 1;
    20     }
    21     if(flag) puts("invalid");
    22     else puts("valid");
    23 }
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    Drupal 7.23:函数drupal_alter()注释
    请为我们的冷漠付费
    使用Drush管理Drupal站点
    Getting and installing the PEAR package manager
    CKEditor和IMCE构建drupal编辑器
    Drupal资源
    【转】为drupal初学者准备的12个精品课程
    OFBIZ+ECLIPSE
    OFBIZ安装
    CentOS6.4 利用sendEmail发邮件
  • 原文地址:https://www.cnblogs.com/zyue/p/4338344.html
Copyright © 2020-2023  润新知