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

Codeforces 1684C

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

Codeforces 1684C

问题描述

给定一个 n n n行 m m m列的网格,每个格子有一个正整数。一个_优秀_的网格,要求每行的数字单调不减。

换句话说,对任意 1 ≤ i ≤ n 1 le i le n 1≤i≤n且 2 ≤ j ≤ m 2 le j le m 2≤j≤m,都有

a i , j ≥ a i , j − 1 a_{i,j} ge a_{i,j-1} ai,j​≥ai,j−1​。

你不得不做以下的操作仅一次:选择第 i i i列和第 j j j列(不要求不同), 1 ≤ i , j ≤ m 1 le i,j le m 1≤i,j≤m,并交换它们。

求出这个网格在经过一次交换后是否可以变得优秀。如果可以,求出需要选择的列。

输入格式

由多组测试数据。

第一行为一个整数 t ( 1 ≤ t ≤ 100 ) t (1 le t le 100) t(1≤t≤100)。测试点的描述如下。

第一行为两个整数 n n n和 m m m ( 1 ≤ n , m ≤ 2 ⋅ 1 0 5 ) ( 1 le n,m le 2 cdot 10^5) (1≤n,m≤2⋅105)表示行列的数目。

以下 n n n行包含 m m m个整数,第 i i i行第 j j j列为 a i , j ( 1 ≤ a i , j ≤ 1 0 9 ) a_{i,j} (1 le a_{i,j} le 10^9) ai,j​(1≤ai,j​≤109),表示第 i i i行第 j j j列的数。

保证所有测试数据的 n ⋅ m n cdot m n⋅m之和不超过 2 ⋅ 1 0 5 2 cdot 10^5 2⋅105。

输出格式

如果经过这次交换不能得到一个好的网格,输出 − 1 -1 −1。

如果能,输出 2 2 2个整数表示需要交换的列。

如果有多组解,输出任意一组解。

输入输出样例
输入输出
5
2 3
1 2 3
1 1 1
2 2
4 1
2 3
2 2
2 1
1 1
2 3
6 2 1
5 4 3
2 1
1
2
1 1
-1
1 2
1 3
1 1
样例解释

在第一个测试数据中,这个表一开始是好的,所以随便选一个自己和自己交换。

在第二个测试数据中,无解。

在第三个测试数据中,必须交换第一列和第二列。

题解

有一种简单的思路是,将序列暴力排序,找不同,然后按照条件交换所有序列暴力枚举。

代码如下:

#include 
using namespace std;
void solve(vector  > &a)
{
	int n=a.size(),m=a[0].size();
	vector  bad;
	for(int i=0;i
		vector  b=a[i];
		sort(b.begin(),b.end());
		for(int j=0;j
		printf("1 1n");
		return;
	}
	if((int)bad.size()>2)
	{
		printf("-1n");
		return;
	}
	for(int i=0;i
		if(a[i][j]
			printf("-1n");
			return;
		}
	}
	printf("%d %dn",bad[0]+1,bad[1]+1);
}
int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		int n,m;
		scanf("%d%d",&n,&m);
		vector  > a(n,vector(m));
		for(int i=0;i
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947667.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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