栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

湘潭大学大二下程序设计实践oj题 1408 Cow(矩阵中的公牛有冲突,设置最小的隔离线--->贪心算法)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

湘潭大学大二下程序设计实践oj题 1408 Cow(矩阵中的公牛有冲突,设置最小的隔离线--->贪心算法)

一.小知识点

二.题目

        1>注意:题目保证了输入的都是相邻格。(即牛只在相邻格打架)

                         

                        所以当行数不相等时,列数一定相等。此时cow[i]++,即这两头牛之间要一个栅栏

                               当列数不相等时,行数一定相等。此时col[j]++,即这两头牛之间要一个栅栏

        2>buf[ i ]:记录每行每列有多少对牛需要隔开。(注意其开辟的内存空间要比col和row大)

        3.组成buf时为什么遍历row是1到m-1??

三.代码

#include
#include
using namespace std;
#define ll long long
#define N 111
#define X 111111
int main()
{
	int T;
	scanf("%d",&T);
	while(T--){
		//TODO
		ll n,m,p,k,i,j,x1,y1,x2,y2;
		scanf("%lld %lld %lld %lld",&n,&m,&p,&k);
		ll row[N]={0},col[N]={0};//记录在第i和i+1行相邻 和 在第j和j+1列 相邻的牛的数量
		for(i=1;i<=p;i++){
			//TODO
			scanf("%lld %lld %lld %lld",&x1,&y1,&x2,&y2);
			x2=max(x1,x2);
			x1=min(x1,x2);
			y2=max(y1,y2);
			y1=min(y1,y2);
			if(x2!=x1){//在第i行!
				row[x1]++;
			}
			if(y2!=y1){//在第j列!
				col[y1]++;
			}
		}
		ll buf[X]={0};
		ll t=0,sum=0;
		for(i=1;i<=m-1;i++){//???
			if(row[i]>0) buf[t++]=row[i];	
		}	
		for(i=1;i<=n-1;i++){
			if(col[i]>0) buf[t++]=col[i];
		}
		if(t<=k){//k条栅栏可以完全分开牛,打架的牛的对数为0,再输出需要建立的最少的栅栏数。
			printf("0 %lldn",t);
		}
		else{//k条栅栏 不 可以完全分开牛,输出敌对关系的牛的数量
			sort(buf,buf+t);
			for(i=0;i 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/861857.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号