专栏文章

题解:AT_abc398_d [ABC398D] Bonfire

AT_abc398_d题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipu8x1o
此快照首次捕获于
2025/12/03 18:02
3 个月前
此快照最后确认于
2025/12/03 18:02
3 个月前
查看原文
注意到移动烟雾非常的困难,但是移动人和火堆是简单的。
考虑将移动烟雾转换为移动火堆,火堆每移动到一个为止就在那个位置上放置一个烟雾,用哈希表或者 map 处理即可。
代码:
CPP
#include<bits/stdc++.h>
#define ll long long
#define mkp(x,y) make_pair(x,y)
using namespace std;

ll read(){
    ll x=0,f=1;char ch=getchar_unlocked();
    while(ch<'0'||'9'<ch){if(ch=='-')f=-1;ch=getchar_unlocked();}
    while('0'<=ch&&ch<='9'){x=x*10+ch-'0';ch=getchar_unlocked();}
    return f*x;
}

const int N = 2e5+5;
int n,x,y,p=0,q=0;
char s[N],ans[N];
map<pair<int,int>,bool>vis;

int main(){vis[mkp(0,0)]=1;
    n=read();x=read(),y=read();
    scanf("%s",s+1);for(int i=1;i<=n;i++){
        if(s[i]=='N')p++,x++;
        if(s[i]=='S')p--,x--;
        if(s[i]=='W')q++,y++;
        if(s[i]=='E')q--,y--;
        vis[mkp(p,q)]=1;
        ans[i]=vis[mkp(x,y)]?'1':'0';
    }puts(ans+1);
    return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...