第三次wa了两次 原因如下呢

第一版

  #include <iostream>
  #include <vector>
  #include <algorithm>

  using namespace std;

  int main(){
      long long k;
      int n , x;
      vector<int> A,B;
      cin >> n >> k >> x;
      for( int i = 0 ; i < n ; i++){
          int a;
          cin >> a;
          A.push_back(a);
      }
      for (long long i = 0 ; i < k ; i++){
          rotate(A.begin(), A.begin() + x - 1, A.begin() + x );
      }
      for (int i = 0 ; i < n ; i ++){
          if (i == 0) cout << A[i];
          else cout <<" "<< A[i];
      }
      return 0;
      

1你的原始代码对每个 k 都执行一次 rotate,时间复杂度 O(k × n)

2当 k 很大时(比如 10^9),这显然会超时

3实际上,移动操作具有周期性,移动 n 次后数组会回到原始状态

所以 上面的代码的优化空间还很大 为了避免TLE 必须进行计算优化

于是有了第二版

  #include <iostream>
  #include <vector>
  #include <algorithm>

  using namespace std;

  int main(){
      long long k;
      int n , x;
      //vector<int> A(n); 错 不能写在读取n的前面
      cin >> n >> k >> x;
      vector<int> A(n);
      for( int i = 0 ; i < n ; i++){
          cin >> A[i];
      }
      int k2 = k % x;
      rotate(A.begin(),A.begin()+x-k2,A.begin()+x);
      for (int i = 0 ; i < n ; i ++){
          if (i == 0) cout << A[i];
          else cout <<" "<< A[i];
      }
      return 0;
  }

优化思路:

计算 k % n 得到实际有效的移动次数 其实就是个周期性

通过一次操作直接得到最终结果,而不是模拟 k 次移动

这样时间复杂度从 O(k × n) 降到了 O(n),可以处理很大的 k 值。