比赛 |
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");
}
}