当前位置:网站首页>cf:C. Column Swapping【排序 + 模拟】

cf:C. Column Swapping【排序 + 模拟】

2022-07-07 00:37:00 白速龙王的回眸

在这里插入图片描述

分析

记录每一行不满足排序的位置
如果大于三个直接凉凉
然后用个set记录需要换的(l,r)
如果大于1个凉凉
然后再判断每个行的l r必须满足a[l] < a[r]
否则凉凉

ac code

import sys
input = sys.stdin.readline

for _ in range(int(input())):
    n, m = list(map(int, input().split()))
    grid = [[0] * m for _ in range(n)]
    for i in range(n):
        grid[i] = list(map(int, input().split()))
    flag = True
    mustChanges = set()
    for i in range(n):
        lst = []
        temp = sorted(grid[i])
        for j in range(m):
            if temp[j] != grid[i][j]:
                lst.append(j)
        if len(lst) > 2:
            flag = False
            break
        elif len(lst) == 2:
            mustChanges.add((lst[0], lst[1]))
        if len(mustChanges) >= 2:
            flag = False
            break




    if not flag:
        print(-1)
    else:
        if len(mustChanges) == 0:
            print(1, 1)
        else:
            l, r = list(mustChanges)[0]
            flag = True
            for i in range(n):
                if grid[i][l] < grid[i][r]:
                    flag = False
                    break
            if flag:
                print(l + 1, r + 1)
            else:
                print(-1)

总结

排序 + 模拟

原网站

版权声明
本文为[白速龙王的回眸]所创,转载请带上原文链接,感谢
https://bridge-killer.blog.csdn.net/article/details/125648615