zoukankan      html  css  js  c++  java
  • Permutation Recovery(模拟)

    Permutation Recovery

    Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 451    Accepted Submission(s): 312


    Problem Description
    Professor Permula gave a number of permutations of the n integers 1, 2, ..., n to her students. For each integer i (1 <= i <= n), she asks the students to write down the number of integers greater than i that appears before i in the given permutation. This number is denoted ai. For example, if n = 8 and the permutation is 2,7,3,5,4,1,8,6, then a1 = 5 because there are 5 numbers (2, 7, 3, 5, 4) greater than 1 appearing before it. Similarly, a4 = 2 because there are 2 numbers (7, 5) greater than 4 appearing before it.

    John, one of the students in the class, is studying for the final exams now. He found out that he has lost the assignment questions. He only has the answers (the ai's) but not the original permutation. Can you help him determine the original permutation, so he can review how to obtain the answers?
     
    Input
    The input consists of a number of test cases. Each test case starts with a line containing the integer n (n <= 500). The next n lines give the values of a1, ..., an. The input ends with n = 0.
     
    Output
    For each test case, print a line specifying the original permutation. Adjacent elements of a permutation should be separated by a comma. Note that some cases may require you to print lines containing more than 80 characters.
     
    Sample Input
    8 5 0 1 2 1 2 0 0 10 9 8 7 6 5 4 3 2 1 0 0
     
    Sample Output
    2,7,3,5,4,1,8,6 10,9,8,7,6,5,4,3,2,1
    题解:这个题就是给你了逆序数,让你求出原排列;我的思路是从1到N,一次放在数组中,因为i之前的肯定比i小,所以如果a[i]=0逆序数加一;证明a[i]还没放,没放肯定比i大喽;
    代码:
     1 #include<stdio.h>
     2 #include<string.h>
     3 const int MAXN=510;
     4 int main(){
     5     int N,x;
     6     int ans[MAXN];
     7     while(~scanf("%d",&N),N){
     8         memset(ans,0,sizeof(ans));
     9         for(int i=1;i<=N;i++){
    10             scanf("%d",&x);
    11             int tot=0;
    12             for(int j=1;j<=N;j++){
    13                 if(ans[j])continue;
    14                 if(tot==x){
    15                     ans[j]=i;break;
    16                 }
    17                 if(!ans[j])tot++;
    18             }
    19         }
    20         for(int i=1;i<=N;i++){
    21             if(i-1)printf(",");
    22             printf("%d",ans[i]);
    23         }
    24         puts("");
    25     }
    26     return 0;
    27 }
  • 相关阅读:
    DotNetty 实现 Modbus TCP 系列 (一) 报文类
    C# 获取文件详细备注信息 (如图片、视频实际创建时间)
    Java 下载 HLS (m3u8) 视频
    开源 DotNetty 实现的 Modbus TCP/IP 协议
    SQL Server 2008 开启远程连接
    在 Web 页面使用 VLC 插件播放 m3u8 视频流 (360 极速模式)
    在 Web 页面中使用离线地图
    使用 Travis CI 自动部署 Hexo 站点至 GitHub Pages
    BZOJ 3238: [Ahoi2013]差异((单调栈+后缀数组)/(后缀树))
    BZOJ 3998: [TJOI2015]弦论(后缀自动机)
  • 原文地址:https://www.cnblogs.com/handsomecui/p/4803169.html
Copyright © 2011-2022 走看看