724B Batch Sort 这个题目
你可以将每行中的两个元素交换一次,还有整列交换两列的机会一次。 使得每一行都递增
#include <iostream>
using namespace std;int main()
{
int n, m;
cin >> n >> m;//n行m列
int a[30][30];
for (int i = 0;i < n;i++)
for (int j = 0;j < m;j++)
cin >> a[i][j];
int b[30], c[30];
for(int i=0;i<30;i++)
b[i]=0;
for (int k = 0;k < m;k++)
c[k] = k + 1;
for (int i = 0;i < n;i++)
for (int j = 0;j < m;j++)
if (a[i][j] != c[j])
b[i]++;
bool ok = true;
for (int i = 0;i < n;i++)
if (b[i] != 2 && b[i] != 0)ok = false;
if (ok)cout << "YES" << endl;
else
{
int i, j;
for (i = 0;i < n&&ok == false;i++)
for (j = i+1;j < m&&ok == false;j++)
{
int temp;
for (int k = 0;k < n;k++)
{
temp = a[k][i];
a[k][i] = a[k][j];
a[k][j] = temp;
}
for (int z = 0;z < 30;z++)
b[z] = 0;
for (int x = 0;x < n;x++)
for (int y = 0;y < m;y++)
if (a[x][y] != c[y])
b[x]++;
ok = true;
for (int p = 0;p < n;p++)
if (b[p] != 2 && b[p] != 0)ok = false;
if (ok)cout << "YES" << endl;
else
{
int temp1;
for (int k = 0;k < n;k++)
{
temp1 = a[k][i];
a[k][i] = a[k][j];
a[k][j] = temp1;
}
}
}
if (!ok)cout << "NO" << endl;
}
return 0;
}