1 条题解

  • 0
    @ 2023-9-3 10:11:01
    #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

    [Usaco2005 Feb] Rigging the Bovine Election 竞选划区

    信息

    ID
    1675
    时间
    5000ms
    内存
    64MiB
    难度
    10
    标签
    (无)
    递交数
    3
    已通过
    3
    上传者