zoukankan      html  css  js  c++  java
  • 【TFLSnoi李志帅】第⑩+②篇文章---考试题精选

    E - 逆置换(进阶习题)

    输入一个1到n的排列,p1 ,p2, …, pn
    即1到n都出现了1次的一个长度为n的数组p。
    对于每个满足1 <= i <= n的i,求下标j使得pj = i。

    1 <= n <= 100000
     

    Input第一行一个整数n,表示排列长度 接下来n行,每行一个整数pi,表示排列的内容。Output第一行输出一个排列长度n,为了方便造数据。 输出共n行,其中第i行包含一个整数j,使得pj=i。Sample Input

    4
    4
    3
    1
    2

    Sample Output

    4
    3
    4
    2
    1



    ——————————————————————————————————————————————————————————————————————————————————————---------
    我之前写的代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     long long n,m,a[100005],ans[100005];//不必要用long long(应该都知道是改的代码吧
     6     long long sum;
     7     cin>>n;
     8     for(int i=1;i<=n;i++)cin>>a[i];
     9     for(int i=1;i<=n;i++){
    10         for(int j=1;j<=n;j++){//因为n<=100000,所以这里双重循环上限是10^10,会超时
    11             if(a[j]==i){
    12                 ans[i]=j;
    13                 break;
    14             }
    15         }
    16     }
    17     cout<<n<<endl;
    18     for(int i=1;i<=n;i++)cout<<ans[i]<<endl;
    19     return 0;
    20 }

    结果它运行超时了(TAT)

    后来。。。我把它改成了一重循环,如下图:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     long long n;
     6     long long a[100005],b[100005];
     7     cin>>n;
     8     
     9     for(int i=1;i<=n;i++)
    10     {
    11         cin>>a[i];//边输入,边记录
    12         b[a[i]]=i;//注意此处写法,i代表a【i】在数组中的位置
    13     }
    14     cout<<n<<endl;
    15     for(int i=1;i<=n;i++){
    16         cout<<b[i]<<endl;
    17     }
    18     return 0;
    19 }

    诶,满分

  • 相关阅读:
    并发编程(一)------同步类容器
    以邮件附件的形式发送测试报告
    Page Object 设计模式-PO
    生成Html 测试报告
    PHP 限制访问ip白名单
    PHP trait与单例模式 (一次编写,到处使用)
    ubuntu编译安装swoole (存多版本php时)
    ubuntu中apache的ssl证书配置及url重写
    如何在Ubuntu上在多个PHP版本之间切换 (for swoole)
    lamp项目上线流程简述 (ubuntu16.04 )
  • 原文地址:https://www.cnblogs.com/TFLSc1908lzs/p/13534343.html
Copyright © 2011-2022 走看看