ACwing:1459奶牛体操

该博客详细介绍了如何通过双层循环遍历数组,构建一个对称的二维数组来解决AcWing上的奶牛体操问题。在遍历过程中,记录下每头奶牛排名超过另一头奶牛的情况,并最终计算出不一致的奶牛对数。代码使用C++编写,实现了直接暴力求解策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题链接:1459. 奶牛体操 - AcWing题库

这道题很有意思,根据题目分析我们知道,如果想要找到一致的奶牛对数的话,我们需要每一次遍历这个数组,找到谁在谁的前面,从而找到最终,都有那只奶牛一直都在另一只奶牛的前面;

由于数据不大,我们直接暴力,方法是,双层for循环,开一个二维数组,例如4321,循环时。把ans[4][3]=1,ans[4][2]=1,ans[4][1]=1...,一直循环即可。

最终我们会形成一个以左上到右下为对角线,i j与j i互为对称的两个三角形数组,我们只需要遍历一个三角形,只要两个三角形在这个互为相反的位置都为1,那么说明在遍历过程中,至少有一次出现了一次一头牛排名超过另一头牛的情况,那么就不记录,最终直接输出即可:

AC代码如下:

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

int arr[25][25];
int ans[25];

int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		for(int j=1;j<=m;j++)
			cin>>ans[j];
//		for(int j=1;j<=m;j++)
//			cout<<ans[j]<<' '<<endl;
		
		for(int j=1;j<=m;j++)
		{
			for(int k=j;k<=m;k++)
			{
				arr[ans[j]][ans[k]]=1;
			}
		}
	}
	
//	for(int i=1;i<=m;i++)
//	{
//		for(int j=1;j<=m;j++)
//		{
//			cout<<arr[i][j]<<' ';
//		}
//		cout<<endl;
//	}
	int all=0;
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=i;j++)
		{
			if(arr[i][j]==1&&arr[j][i]==1)
			continue;
			all++;
		}
	}
	
	cout<<all;
	
}

完结撒花

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值