zoukankan      html  css  js  c++  java
  • SCP-bzoj-1054

    项目编号:bzoj-1054

    项目等级:Safe

    项目描述:

      戳这里

    特殊收容措施:

      直接状压BFS即可,我实现的比较渣。。复杂度O(45*216)。

    附录:

     1 #include <bits/stdc++.h>
     2 #define range(i,c,o) for(register int i=(c);i<(o);++i)
     3 #define dange(i,c,o) for(register int i=(c);i>(o);--i)
     4 using namespace std;
     5  
     6 //#define __debug
     7 #ifdef __debug
     8     #define Function(type) type
     9     #define Procedure      void
    10 #else
    11     #define Function(type) __attribute__((optimize("-O2"))) inline type
    12     #define Procedure      __attribute__((optimize("-O2"))) inline void
    13 #endif
    14  
    15 Function(int) encode(bool map[4][4])
    16 {
    17     int ret=0;
    18     range(i,0,4) range(j,0,4)
    19     {
    20         (ret<<=1)+=map[i][j];
    21     }
    22     return ret;
    23 }
    24 Procedure decode(
    25     const int&status,bool map[4][4]
    26 )
    27 {
    28     int S=status;
    29     dange(i,3,-1) dange(j,3,-1)
    30     {
    31         map[i][j]=S&1,S>>=1;
    32     }
    33 }
    34  
    35 static const int dx[4]={ 1,-1, 0, 0};
    36 static const int dy[4]={ 0, 0, 1,-1};
    37 bool ST[4][4],ED[4][4],tmp[4][4];
    38 queue< pair<int,int> > que;
    39 bitset<65536> vis;
    40 Procedure extend(
    41     const int&x,const int&y,const int&s
    42 )
    43 {
    44     range(i,0,4)
    45     {
    46         int tx=x+dx[i],ty=y+dy[i];
    47         if(~tx&&~ty&&tx<4&&ty<4&&!tmp[tx][ty])
    48         {
    49             tmp[x][y]=0,tmp[tx][ty]=1;
    50             int status=encode(tmp);
    51             if(!vis.test(status))
    52             {
    53                 que.push(make_pair(status,s));
    54                 vis.set(status);
    55             }
    56             tmp[x][y]=1,tmp[tx][ty]=0;
    57         }
    58     }
    59 }
    60 Function(int) BFS()
    61 {
    62     int init=encode(ST),zone=encode(ED);
    63     que.push(make_pair(init,0));
    64     vis.set(init);
    65     for(;!que.empty();que.pop())
    66     {
    67         int status=que.front().first ,
    68             steps =que.front().second;
    69         if(status==zone) return steps;
    70         decode(status,tmp);
    71         range(i,0,4) range(j,0,4)
    72         {
    73             if(tmp[i][j]) extend(i,j,steps+1);
    74         }
    75     }
    76 }
    77  
    78 int main()
    79 {
    80     range(i,0,4) range(j,0,4)
    81     {
    82         char c;
    83         while(!isdigit(c=getchar()));
    84         ST[i][j]=c-'0';
    85     }
    86     range(i,0,4) range(j,0,4)
    87     {
    88         char c;
    89         while(!isdigit(c=getchar()));
    90         ED[i][j]=c-'0';
    91     }
    92     return printf("%d
    ",BFS()),0;
    93 }
    View Code
  • 相关阅读:
    【Luogu】P1402 酒店之王 题解
    CSP/S 2019 游记
    【Luogu】P1306 斐波那契公约数 题解
    【Luogu】P1072 Hankson 的趣味题 题解
    字符串函数
    对数换底公式
    round(x,y)和format(x,y)
    约束和索引
    复合主键对外键的影响
    外键
  • 原文地址:https://www.cnblogs.com/spactim/p/6715382.html
Copyright © 2011-2022 走看看