比赛 2025暑期集训第7场 评测结果 A
题目名称 天气预报 最终得分 100
用户昵称 Hollow07 运行时间 0.161 s
代码语言 C++ 内存使用 50.59 MiB
提交时间 2025-08-11 17:21:33
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define ll long long

bool vis[600][17][7][7][7][7],f[600][17][7][7][7][7];
bool a[600][17];
ll n;
const ll mx[]={0,0,1,0,-1,0,2,0,-2},my[]={0,1,0,-1,0,2,0,-2,0};

bool dfs(ll now,ll s,ll d1,ll d2,ll d3,ll d4){
    ll x=(s-1)/4+1,y=(s-1)%4+1;
    if(x==1&&y==1)d1=0;
    else if(x==1&&y==3)d2=0;
    else if(x==3&&y==1)d3=0;
    else if(x==3&&y==3)d4=0;
    bool &cur=f[now][s][d1][d2][d3][d4];
    if(vis[now][s][d1][d2][d3][d4])return cur;
    if(d1>6||d2>6||d3>6||d4>6)return cur=0;
    if(a[now][s]|a[now][s+1]|a[now][s+4]|a[now][s+5])return cur=0;
    vis[now][s][d1][d2][d3][d4]=1;
    if(now==n)return 1;
    for(ll i=0;i<9;++i){
            ll vx=(s-1)/4+1+mx[i],vy=(s-1)%4+1+my[i];
            if(vx>0&&vx<=3&&vy>0&&vy<=3)
                if(dfs(now+1,(vx-1)*4+vy,d1+1,d2+1,d3+1,d4+1))return cur=1;
        }
    return cur=0;
}
int main(){
//	freopen("in.in","r",stdin);
	freopen("weather_forecast.in","r",stdin);
	freopen("weather_forecast.out","w",stdout);
    while(~scanf("%lld",&n)&&n){
        for(ll i=1;i<=n;++i)
            for(ll j=1;j<=16;++j) scanf("%lld",&a[i][j]);
        memset(vis,0,sizeof vis);memset(f,0,sizeof f);
        if(dfs(1,6,1,1,1,1))puts("1");
        else puts("0");
    }
}