zoukankan      html  css  js  c++  java
  • uva 120 C

    题意:给一个n长度的子序列,每次可以把从下往上数,第几个及上面的都反转过来,最后序列变为上升子序列

    分析:可以每次把当前最大的放到下面,这样以后无论如何翻动都不会干扰到他,直到得到答案

    题目没有要求最优解,这样肯定能得到结果,借助函数reverse反转数组效果不错,没难度,见代码

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=35;
     4 
     5 struct point{
     6    int id,x;
     7 }p[maxn];
     8 
     9 bool cmp(point a,point b){
    10    return a.x<b.x;
    11 }
    12 
    13 int num[maxn];
    14 
    15 int main(){
    16    int n,d;
    17    string line;
    18    while(getline(cin,line)){
    19       stringstream ccin(line);
    20       n=0;
    21       while(ccin>>d){
    22          p[n].x=d;
    23          p[n].id=n+1;
    24          n++;
    25       }
    26       for(int i=0;i<n-1;i++)
    27          cout<<p[i].x<<" ";
    28       cout<<p[n-1].x<<endl;
    29       sort(p,p+n,cmp);
    30       for(int i=0;i<n;i++)
    31          num[p[i].id-1]=i+1;
    32       int ans=n;
    33       while(n>1){
    34          int i;
    35          for(i=n-1;i>=0;i--)
    36             if(num[i]==n)
    37                break;
    38          if(i==0){
    39             reverse(num,num+n);
    40             n--;
    41             cout<<ans-n<<" ";
    42          }
    43          else if(i==n-1)
    44             n--;
    45          else{
    46             cout<<ans-i<<" ";
    47             reverse(num,num+i+1);
    48             reverse(num,num+n);
    49             n--;
    50             cout<<ans-n<<" ";
    51          }
    52 
    53       }
    54       cout<<0<<endl;
    55    }
    56    return 0;
    57 }
    View Code
  • 相关阅读:
    凯撒密文的破解编程实现
    微软ping命令的源代码
    从编程到入侵
    永远的后门
    永远的后门
    奇妙的Base64编码
    用端口截听实现隐藏嗅探与攻击(二)
    奇妙的Base64编码
    Liferea 1.1.2
    Equinox Desktop Environment 1.1
  • 原文地址:https://www.cnblogs.com/jihe/p/4992780.html
Copyright © 2011-2022 走看看