zoukankan      html  css  js  c++  java
  • CF 53D

    题意:

    给定两个数组,求由第一个数组到第二个数组的操作方法数 和 步骤(只能相邻间交换)

    暴力+模拟

    View Code
     1 /*
     2 
     3 */
     4 #include<stdio.h>
     5 #include<string.h>
     6 #include<stdlib.h>
     7 #include<algorithm>
     8 #include<iostream>
     9 #include<queue>
    10 //#include<map>
    11 #include<math.h>
    12 using namespace std;
    13 typedef long long ll;
    14 //typedef __int64 int64;
    15 const int maxn = 305;
    16 const int inf = 0x7fffffff;
    17 const double pi=acos(-1.0);
    18 int a[ maxn ],b[ maxn ];
    19 int vis_b[ maxn ];
    20 struct node{
    21     int x,y;
    22 };
    23 queue<node>step[ maxn ];
    24 void init(){
    25     for( int i=0;i<maxn;i++ ){
    26         while( !step[ i ].empty() )
    27             step[ i ].pop();
    28     }
    29     memset( vis_b,0,sizeof( vis_b ) );
    30 }
    31 int main(){
    32     int n;
    33     while( scanf("%d",&n)!=EOF ){
    34         for( int i=0;i<n;i++ )
    35             scanf("%d",&a[ i ]);
    36         for( int i=0;i<n;i++ )
    37             scanf("%d",&b[ i ]);
    38         init();
    39         int cnt=0;
    40         node now;
    41         for( int i=0;i<n;i++ ){
    42             for( int j=0;j<n;j++ ){
    43                 if( vis_b[ j ]==0&&a[ i ]==b[ j ] ){
    44                     vis_b[ i ]=1;
    45                     if( i==j ){
    46                         //vis_b[ j ]=1;
    47                         break;
    48                     }
    49                     else if( i<j ){
    50                         //vis_b[ j ]=1;
    51                         now.x=j-1,now.y=j;
    52                         step[ cnt ].push( now );
    53                         swap( b[ now.x ],b[ now.y ] );
    54                         while( 1 ){
    55                             if( now.x==i ) break;
    56                             now.x--;
    57                             now.y--;
    58                             step[ cnt ].push( now );
    59                             swap( b[ now.x ],b[ now.y ] );
    60                         }
    61                         cnt++;
    62                         break;
    63                     }
    64                     else if( i>j ){
    65                         //vis_b[ j ]=1;
    66                         now.x=j,now.y=j+1;
    67                         step[ cnt ].push( now );
    68                         swap( b[ now.x ],b[ now.y ] );
    69                         while( 1 ){
    70                             if( now.y==i ) break;
    71                             now.x++;
    72                             now.y++;
    73                             step[ cnt ].push( now );
    74                             swap( b[ now.x ],b[ now.y ] );
    75                         }
    76                         cnt++;
    77                         break;
    78                     }
    79                 }
    80             }
    81         }
    82         int ans=0;
    83         for( int i=0;i<cnt;i++ )
    84             ans+=( step[ i ].size() );
    85         printf("%d\n",ans);
    86         for( int i=0;i<cnt;i++ ){
    87             while( !step[ i ].empty() ){
    88                 now=step[ i ].front();
    89                 printf("%d %d\n",1+now.x,1+now.y);
    90                 step[ i ].pop();
    91             } 
    92         }
    93     }
    94     return 0;
    95 }
    keep moving...
  • 相关阅读:
    古谚、评论与论断、名篇与名言
    重读《西游记》
    重读《西游记》
    命名之法 —— 时间、季节、地点
    命名之法 —— 时间、季节、地点
    文言的理解 —— 古时的称谓、别称、别名
    文言的理解 —— 古时的称谓、别称、别名
    Oracle GoldenGate for Oracle 11g to PostgreSQL 9.2.4 Configuration
    瀑布 敏捷 文档
    POJ 1325 ZOJ 1364 最小覆盖点集
  • 原文地址:https://www.cnblogs.com/xxx0624/p/2964489.html
Copyright © 2011-2022 走看看