您的位置:首页 > 其它

Codeforces 724B 暴力模拟

2016-10-09 00:28 429 查看
题意:

你可以将每行中的两个元素交换一次,还有整列交换两列的机会一次。

思路:

先判断是否要交换两列,如果每行最多2个不在相应位置上的数,就直接YES

否则,

暴力枚举交换两列后,看每行是否满足要求。

#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
typedef long long LL;
typedef unsigned long long ULL;

using namespace std;
int a[50][50],n,m,i,j,k;
bool check()
{
int i,j,k;
for(i=1;i<=n;i++)
{
for(j=1,k=0;j<=m;j++)if(a[i][j]!=j)k++;
if(k>2)return 0;
}
return 1;
}
int main()
{
cin>>n>>m;
for(i=1;i<=n;i++)for(j=1;j<=m;j++)cin>>a[i][j];
if(check())
{
puts("YES");
return 0;
}
for(i=1;i<m;i++)for(j=i+1;j<=m;j++)
{
for(k=1;k<=n;k++)swap(a[k][i],a[k][j]);
if(check())
{
puts("YES");
return 0;
}
for(k=1;k<=n;k++)swap(a[k][i],a[k][j]);
}
puts("NO");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: