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
  • 相关阅读:
    UVA 10617 Again Palindrome
    UVA 10154 Weights and Measures
    UVA 10201 Adventures in Moving Part IV
    UVA 10313 Pay the Price
    UVA 10271 Chopsticks
    Restore DB後設置指引 for maximo
    每行SQL語句加go換行
    种服务器角色所拥有的权限
    Framework X support IPV6?
    模擬DeadLock
  • 原文地址:https://www.cnblogs.com/spactim/p/6715382.html
Copyright © 2011-2022 走看看