2 条题解

  • 0
    @ 2026-6-21 23:02:54
    #include<iostream>
    using namespace std;
    int main(){
    	int x,y,z,a[105],b[105],n=0;
    	cin>>x>>y>>z;
    	for(int i=1;i<=x;i++){
    		cin>>a[i];
    		b[i+n]=a[i];
    		if(i==y){
    			b[i+1]=z;
    			n++;
    		}
    	}
    	for(int i=1;i<=x+1;i++)cout<<b[i]<<' ';
    	return 0;
    }
    
    • 0
      @ 2026-6-19 10:30:56

      📝 题目大意

      给定一个长度为 NN 的整数序列 AA,以及整数 KKXX。要求在序列 AA 的第 KK 个元素之后插入整数 XX,得到长度为 N+1N+1 的新序列 BB,并输出 BB

      💡 解题思路

      1. 题目分析:数据范围 N100N \le 100,非常小,直接模拟插入操作即可。KK 表示第 KK 个元素(1-indexed),插入位置在 AKA_K 之后、AK+1A_{K+1} 之前。
      2. 算法推导
        • 读入 N,K,XN, K, X 以及序列 AANN 个元素。
        • 由于 C++ 中 vector 下标从 00 开始,第 KK 个元素对应下标 K1K-1,在其后插入即为在 A.begin() + K 处插入 XX(即新元素在 AKA_K 之后)。
        • 使用 vector::insert 完成插入,然后遍历输出即可。
        • 注意输出格式:元素之间用空格分隔,行末无多余空格。
      3. 边界与细节
        • KK 可以等于 NN(样例 3),此时 XX 被插入到序列末尾,代码同样能正确处理。
        • KK 可以等于 11(样例 2),此时 XX 被插入到第一个元素之后。
        • 输出时注意最后一个元素后不要带空格,否则可能导致格式错误(WA)。

      ⏱️ 复杂度分析

      • 时间复杂度O(N)O(N)vector::insert 在末尾插入或任意位置插入都需要移动元素,对 N100N \le 100 完全可接受。
      • 空间复杂度O(N)O(N),存储序列。

      💻 标准代码 (C++)

      #include <iostream>
      #include <vector>
      using namespace std;
      
      int main() {
          int N, K, X;
          cin >> N >> K >> X;
      
          vector<int> A(N);
          for (int i = 0; i < N; i++) {
              cin >> A[i];                     // 读入原序列 A
          }
      
          // 第 K 个元素下标为 K-1,在其后插入 X 即在下标 K 处插入
          A.insert(A.begin() + K, X);
      
          for (int i = 0; i < A.size(); i++) {
              cout << A[i];
              if (i != A.size() - 1) {         // 控制空格:行末不加多余空格
                  cout << " ";
              }
          }
          cout << endl;
      
          return 0;
      }
      
      • 1

      信息

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