zoukankan      html  css  js  c++  java
  • BNUOJ 4299 God Save the i-th Queen(想法题)

    题目链接==》    http://www.bnuoj.com/v3/problem_show.php?pid=4299

     

    题意:一个X*Y棋盘上放了N个queens,再放一个queen,有几个空格可以放,前提是和已经在棋盘上的queen不同行不同列不同斜线

     

    思路:每个点所在四条直线上,不能再放queen,所以将有点的直线标记,再遍历所有点,如果点所在直线已被标记,则不选。(完了)

    代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<algorithm>
     4 #include<iostream>
     5 
     6 using namespace std;
     7 
     8 const int T=4e4+9;
     9 
    10 int h[T],l[T],xie_1[T],xie_2[T];///xie_1表示斜率大于0的直线
    11 int sum,n,m;
    12 
    13 void begin1( )
    14 {
    15     sum=0;
    16     memset(h, 0 , sizeof( int )*T);
    17     memset(l, 0 , sizeof( int )*T);
    18     memset(xie_1, 0 , sizeof( int )*T);
    19     memset(xie_2, 0 , sizeof( int )*T);
    20 }
    21 
    22 void judge( int x, int y)
    23 {
    24     int w;
    25     h[x]=1; l[y]=1;
    26     xie_1[x+y+1]=1;
    27     w=m+1-y;  /// 标记斜率为负的棋盘,则将列标号倒置,从m-->1,所以这个点所在直线也是L(x+w+1)
    28     xie_2[x+w+1]=1;
    29 }
    30 
    31 void judge_two( int x, int y )
    32 {
    33     int w=m+1-y;
    34     if( h[x] || l[y] || xie_1[x+y+1] || xie_2[x+w+1] )
    35         return ;
    36     sum++;
    37 
    38 }
    39 
    40 
    41 
    42 
    43 int main( )
    44 {
    45     int k,a,b;
    46     while(scanf("%d%d%d",&n,&m,&k),(n+m+k))
    47     {
    48         begin1( );
    49         for(int i=1;i<=k;i++)
    50         {
    51             scanf("%d%d",&a,&b);
    52             judge( a, b );
    53         }
    54         for(int i=1;i<=n;i++)
    55             for(int j=1;j<=m;j++)
    56                 judge_two( i, j );
    57         printf("%d
    ",sum);
    58     }
    59     return 0;
    60 }
    View Code
  • 相关阅读:
    MyBatis学习总结(5)——实现关联表查询
    MyBatis学习总结4--解决字段名与实体类属性名不相同的冲突
    MyBatis学习总结3-优化MyBatis配置文件
    各种数据库的数据类型
    Ubuntu下jdk配置
    null和""的区别
    单例模式
    知识体系(不断更新)
    Servlet错误一览
    如何锻炼敲代码的能力
  • 原文地址:https://www.cnblogs.com/lysr--tlp/p/a123123.html
Copyright © 2011-2022 走看看