1 条题解

  • 0
    @ 2026-6-19 10:30:18

    📝 题目大意

    给定一个 1N1 \sim N 的排列 PP 和一个整数 XX,求 XX 在排列 PP 中的位置(下标从 11 开始)。

    💡 解题思路

    1. 题目分析N100N \leq 100,数据范围极小;PP1N1 \sim N 的排列,保证 XX 一定在 PP 中出现一次,无需考虑不存在的情况。
    2. 算法推导:从 i=1i = 1NN 依次读入 PiP_i,若 Pi=XP_i = X 则直接输出 ii 并结束程序。由于 XX 必定出现在排列中,循环一定会命中。
    3. 边界与细节:下标从 11 开始,不是 00;输入保证 XX 一定存在,无需额外检查。

    ⏱️ 复杂度分析

    • 时间复杂度O(N)O(N),最坏情况下需扫描整个排列。
    • 空间复杂度O(1)O(1),仅使用常数个变量。

    💻 标准代码 (C++)

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        int n, x;
        cin >> n >> x;          // 读入排列长度 N 和目标值 X
        for (int i = 1; i <= n; i++) {  // 下标从 1 开始遍历
            int a;
            cin >> a;           // 读入 P_i
            if (a == x) {       // 找到目标值
                cout << i;      // 输出其位置(1-indexed)
                return 0;       // 直接结束程序
            }
        }
        return 0;
    }
    
    • 1

    信息

    ID
    646
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者