• 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
    ");
    67         else
    68             printf("NO
    ");
    69     }
    70     return 0;
    71 }
  • 相关阅读:
    体温上报APP2.2(第二阶段总结)
    体温上报APP2.1
    体温上报APP2.0
    体温上报APP1.2
    体温上报APP1.1
    个人作业——体温上报APP
    安卓学习14(ViewPager)
    安卓学习13(RecyclerView)
    安卓学习12(ListView)
    javascript获得给定日期的前一天的日期
  • 原文地址:https://www.cnblogs.com/max88888888/p/5940719.html
Copyright © 2020-2023  润新知