首页 > 代码库 > Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) B. Batch Sort
Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) B. Batch Sort
链接
题意:输入n,m,表示一个n行m列的矩阵,每一行数字都是1-m,顺序可能是乱的,每一行可以交换任意2个数的位置,并且可以交换任意2列的所有数 问是否可以使每一行严格递增
思路:暴力枚举所有可能的列变换 然后在所有可能的情况下求是否存在一种情况可以使每一行最多进行一次交换最后得到严格递增的矩阵
AC代码:
1 #include "iostream" 2 #include "stdio.h" 3 #include "string.h" 4 using namespace std; 5 6 int arr[50][50],n,m; 7 bool fun(int k) 8 { 9 int c=0;10 for(int i=0; i<m; i++)11 {12 if(arr[k][i] != i+1)13 c++;14 }15 if(c==0 || c==2)16 return 1;17 return 0;18 }19 20 int main()21 {22 int t,r,c,flag,flag0;23 while(scanf("%d%d",&n,&m)!=EOF)24 {25 for(int i=0; i<n; i++)26 for(int j=0; j<m; j++)27 cin>>arr[i][j];28 29 for(int i=0; i<m; i++)30 {31 for(int j=0; j<m; j++)32 {33 if(i>j) continue;34 for(int k=0; k<n; k++)35 {36 t = arr[k][i];37 arr[k][i] = arr[k][j];38 arr[k][j] = t;39 }40 flag=1;41 flag0=0;42 for(int k=0; k<n; k++)43 {44 if(!fun(k))45 {46 flag=0;47 break;48 }49 }50 if(flag)51 {52 flag0=1;53 break;54 }55 for(int k=0; k<n; k++)56 {57 t = arr[k][i];58 arr[k][i] = arr[k][j];59 arr[k][j] = t;60 }61 }62 if(flag0)63 break;64 }65 if(flag0)66 printf("YES\n");67 else68 printf("NO\n");69 }70 return 0;71 }
Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) B. Batch Sort
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。