专栏文章
题解:P9939 [USACO21OPEN] Acowdemia III B
P9939题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mioic2oh
- 此快照首次捕获于
- 2025/12/02 19:41 3 个月前
- 此快照最后确认于
- 2025/12/02 19:41 3 个月前
奶牛交友
思路整理:
题目给出了两头奶牛之间交友的条件,我们分两类讨论:
-
若两头奶牛在同一条直线上,且只间隔着一块草地,则它们可以见面。

-
若两头奶牛及一块草地呈现拐角状(如下图),也能够见面。

对于能见面的奶牛的搭配要求:
-
一个见面位置最多只能供一组奶牛使用,即不能出现两组奶牛选择同一个位置作为见面地点。
-
一组奶牛最多只能选择一个见面位置,也就是说如果有两个位置可以供这一组奶牛使用,它们也只能选择一个作为见面地点。
-
一头奶牛可以和其他不同的奶牛在不同的位置见面。
通过以上的详细分析,写代码分分钟的事。
AC CODE:
CPP#include<bits/stdc++.h>
using namespace std;
long long n,m,ans;
char a[1005][1005];
int main(){
//可自行添加快读等。
cin>>n>>m;
for(int i=1;i<=n;i++){//以字符的形式读入。
for(int j=1;j<=m;j++)cin>>a[i][j];
}for(int i=1;i<=n;i++){//情况一。
for(int j=1;j<=m;j++){
if(a[i][j]=='G'){
if(a[i-1][j]=='C' && a[i+1][j]=='C')a[i][j]='.',ans++;
else if(a[i][j-1]=='C' && a[i][j+1]=='C')a[i][j]='.',ans++;
}
}
}for(int i=1;i<=n;i++){//情况二。
for(int j=1;j<=m;j++){
if(a[i][j]=='C' && a[i+1][j-1]=='C'){
if(a[i][j-1]=='G')a[i][j-1]='.',ans++;
else if(a[i+1][j]=='G')a[i+1][j]='.',ans++;
}if(a[i][j]=='C' && a[i+1][j+1]=='C'){//与上面的情况不排斥,不能加else。
if(a[i][j+1]=='G')a[i][j+1]='.',ans++;
else if(a[i+1][j]=='G')a[i+1][j]='.',ans++;
}
}
}
cout<<ans;//输出组成朋友的最大数量。
return 0;//好习惯。
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...