打卡信奥刷题(1064)用C++实现信奥 P1671 [USACO05FEB] Rigging the Bovine Election S

P1671 [USACO05FEB] Rigging the Bovine Election S

题目描述

农场被划分为 5 × 5 5\times 5 5×5 的格子,每个格子中都有一头奶牛,并且只有荷斯坦(标记为 H)和杰西(标记为 J)两个品种。如果一头奶牛在另一头上下左右四个格子中的任一格里,我们说它们相连。奶牛要大选了。现在杰西奶牛们想选择 7 7 7 头相连的奶牛,划成一个竞选区,使得其中它们品种的奶牛比荷斯坦的多。

要求你编写一个程序求出方案总数。

输入格式

5 5 5 行,表示农场的情况。

输出格式

输出划区方案总数。

输入输出样例 #1

输入 #1

HHHHH
JHJHJ
HHHHH
HJHHJ
HHHHH

输出 #1

2

C++实现

#include<bits/stdc++.h>
using namespace std;
char str[7][7];
int ans,temp,c[8],d[8],flag[8];
int dir[4][2]={1,0,0,1,-1,0,0,-1};
void Jud(int p)
{
int i,j,dx,dy;
flag[p]=1,temp++;
for(i=0;i<=3;i++)
{
dx=c[p]+dir[i][0];
dy=d[p]+dir[i][1];
for(j=1;j<=7;j++)
{
if(c[j]dx&&d[j]dy&&flag[j]0)
Jud(j);
}
}
}
void Sech(int x,int y)
{
int i,sum;
if(y
8)
{
temp=sum=0;
memset(flag,0,sizeof(flag));
for(i=1;i<=7;i++)
{
if(str[c[i]][d[i]]
‘J’)
sum++;
}
Jud(1);
if(sum>=4&&temp
7)
ans++;
return;
}
if(x>25)
return;
for(i=x;i<=25;i++)
{
c[y]=(i+4)/5;
d[y]=i-((i+4)/5-1)*5;
Sech(i+1,y+1);
}
}
int main()
{
int i;
for(i=1;i<=5;i++)
scanf(“%s”,str[i]+1);
Sech(1,1);
printf(“%d\n”,ans);
return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值