zoukankan      html  css  js  c++  java
  • cf 56B

    B. Spoilt Permutation
    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Vasya collects coins: he has exactly one coin for every year from 1 to n. Naturally, Vasya keeps all the coins in his collection in the order in which they were released. Once Vasya's younger brother made a change — he took all the coins whose release year dated from l to r inclusively and put them in the reverse order. That is, he took a certain segment [l, r] and reversed it. At that the segment's endpoints did not coincide. For example, if n = 8, then initially Vasya's coins were kept in the order 1 2 3 4 5 6 7 8. If Vasya's younger brother chose the segment [2, 6], then after the reversal the coin order will change to 1 6 5 4 3 2 7 8. Vasya suspects that someone else could have spoilt the permutation after his brother. Help him to find that out. Check if the given permutation can be obtained from the permutation 1 2 ... n using exactly one segment reversal. If it is possible, find the segment itself.

    Input

    The first line contains an integer n (1 ≤ n ≤ 1000) which is the number of coins in Vasya's collection. The second line contains space-separated n integers which are the spoilt sequence of coins. It is guaranteed that the given sequence is a permutation, i.e. it contains only integers from 1 to n, and every number is used exactly 1 time.

    Output

    If it is impossible to obtain the given permutation from the original one in exactly one action, print 0 0. Otherwise, print two numbers l r (1 ≤ l < r ≤ n) which are the endpoints of the segment that needs to be reversed to obtain from permutation 1 2 ... n the given one.

    Sample test(s)
    input
    8
    1 6 5 4 3 2 7 8
    output
    2 6
    input
    4
    2 3 4 1
    output
    0 0
    input
    4
    1 2 3 4
    output
    0 0
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    int n,a[1010];
    int main()
    {
          int l=0,r=0;
          scanf("%d",&n);
          for(int i=1;i<=n;i++)
                scanf("%d",&a[i]);
          for(int i=1;i<=n;i++)
                if(a[i]!=i)
                {
                      l=i;
                      break;
                }
          for(int i=n;i>=1;i--)
                if(a[i]!=i)
                {
                      r=i;
                      break;
                }
          for(int i=l;i<r;i++)
          {
                if(a[i]<a[i+1])
                {
                      printf("0 0
    ");
                      return 0;
                }
          }
          if(l==0&&r==0)
          {
                printf("0 0
    ");
                return 0;
          }
          printf("%d %d",l,r);
          return 0;
    }
    

      

  • 相关阅读:
    September 17th 2016 Week 38th Saturday
    【2016-09-16】UbuntuServer14.04或更高版本安装问题记录
    September 16th 2016 Week 38th Friday
    September 11th 2016 Week 38th Sunday
    September 12th 2016 Week 38th Monday
    September 10th 2016 Week 37th Saturday
    September 9th 2016 Week 37th Friday
    c++暂停
    八皇后问题
    ( 转转)Android初级开发第九讲--Intent最全用法(打开文件跳转页面等)
  • 原文地址:https://www.cnblogs.com/a972290869/p/4227195.html
Copyright © 2011-2022 走看看