Submission #922614

#TimeUsernameProblemLanguageResultExecution timeMemory
922614trMatherzNautilus (BOI19_nautilus)C++17
100 / 100
165 ms852 KiB
#include <bits/stdc++.h>
#define MAX 505
typedef std::bitset<MAX> bits;
std::deque<bits> deq;
int R,C,M;
std::string comandos;
bits mapa[MAX];
bits em={};
int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    std::cin>>R>>C>>M;
    for(int i=0;i!=R;++i){
        bits x={};
        std::string s;
        std::cin >> s;
        for(int j=0;j!=C;++j){
            if(s[j]!='#')x[j]=1;
        }
        mapa[i]=x;
    }
    for(int i=0;i!=R;++i){
        bits x=mapa[i];
        deq.push_back(x);
    }
    std::cin>>comandos;
    for(int i=0;i!=M;++i){
        char ch = comandos[i];
        switch(ch){
            ///Right
            case 'W':{
                for(int i=0;i!=R;++i){
                    deq[i]=(deq[i]>>1)&mapa[i];
                }
            }break;

            ///Left
            case 'E':{
                for(int i=0;i!=R;++i){
                    deq[i]=(deq[i]<<1)&mapa[i];
                }
            }break;

            ///North:
            case 'N':{
                for(int i=0;i!=R-1;++i){
                    deq[i]=(deq[i+1])&mapa[i];
                }
                deq[R-1]=em;
            }break;

            ///South
            case 'S':{
                for(int i=R-1;i!=0;--i){
                    deq[i]=(deq[i-1])&mapa[i];
                }
                deq[0]=em;
            }break;

            ///Mystery
            case '?':{
                std::deque<bits> nov;
                for(int i=0;i!=R;++i){
                    bits x={};
                    nov.push_back(x);
                }
                for(int i=0;i!=R;++i){
                    nov[i]|=(deq[i]>>1)&mapa[i];
                }
                for(int i=0;i!=R;++i){
                    nov[i]|=(deq[i]<<1)&mapa[i];
                }
                for(int i=0;i!=R-1;++i){
                    nov[i]|=(deq[i+1])&mapa[i];
                }
                for(int i=1;i!=R;++i){
                    nov[i]|=(deq[i-1])&mapa[i];
                }
                deq=nov;
            }break;
        }
    }
    int count=0;
    for(auto&x:deq)count+=x.count();
    std::cout<<count<<"\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...