专栏文章

题解:P9939 [USACO21OPEN] Acowdemia III B

P9939题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mioic2oh
此快照首次捕获于
2025/12/02 19:41
3 个月前
此快照最后确认于
2025/12/02 19:41
3 个月前
查看原文

奶牛交友

思路整理:

题目给出了两头奶牛之间交友的条件,我们分两类讨论:
  1. 若两头奶牛在同一条直线上,且只间隔着一块草地,则它们可以见面。
  2. 若两头奶牛及一块草地呈现拐角状(如下图),也能够见面。
对于能见面的奶牛的搭配要求:
  • 一个见面位置最多只能供一组奶牛使用,即不能出现两组奶牛选择同一个位置作为见面地点。
  • 一组奶牛最多只能选择一个见面位置,也就是说如果有两个位置可以供这一组奶牛使用,它们也只能选择一个作为见面地点。
  • 一头奶牛可以和其他不同的奶牛在不同的位置见面。
通过以上的详细分析,写代码分分钟的事。

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 条评论,欢迎与作者交流。

正在加载评论...