1 条题解
-
0
#include<bits/stdc++.h> const int mx[4]={0,1,0,-1}; const int my[4]={1,0,-1,0}; bool map[6][6]; int d[6][6]; int s[8]; int nx[8],ny[8]; int q[10]; int ans; inline bool mark() { int i,j,sx,sy,xx,yy,sum=0,t=0,w=1; for (i=1;i<=5;i++)for(j=1;j<=5;j++)d[i][j]=0; for (i=1;i<=7;i++) { ny[i]=s[i]%5;nx[i]=s[i]/5; if (ny[i])nx[i]++; if (!ny[i])ny[i]=5; d[nx[i]][ny[i]]=i; } q[1]=1;d[nx[1]][ny[1]]=0;sum=map[nx[1]][ny[1]]; while (t<w) { xx=nx[q[++t]]; yy=ny[q[t]]; for (int k=0;k<4;k++) { sx=xx+mx[k];sy=yy+my[k]; if (sx>0&&sy>0&&sx<6&&sy<6&&d[sx][sy]) { q[++w]=d[sx][sy]; d[sx][sy]=0; sum+=map[sx][sy]; } } } return w==7&&sum>3; } int main() { for (int i=1;i<=5;i++) for (int j=1;j<=5;j++) { char ch=getchar(); while (ch!='H'&&ch!='J')ch=getchar(); if (ch=='J')map[i][j]=1; } for (s[1]=1;s[1]<=19;s[1]++) for (s[2]=s[1]+1;s[2]<=20;s[2]++) for (s[3]=s[2]+1;s[3]<=21;s[3]++) for (s[4]=s[3]+1;s[4]<=22;s[4]++) for (s[5]=s[4]+1;s[5]<=23;s[5]++) for (s[6]=s[5]+1;s[6]<=24;s[6]++) for (s[7]=s[6]+1;s[7]<=25;s[7]++) if (mark())ans++; printf("%d",ans); return 0; }
- 1
信息
- ID
- 1675
- 时间
- 5000ms
- 内存
- 64MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 3
- 已通过
- 3
- 上传者