3 条题解

  • 1
    @ 2025-12-8 1:53:26

    很简单

    #include <stdio.h>
    int main(){
        int t;
        scanf("%d",&t);
        while(t--){
            int n,k,i=1,a[101]={0},judge=1;
            scanf("%d%d",&n,&k);
            while(n--){
                scanf("%d",&a[i]);
                if(a[i]<a[i-1]){judge=0;}
                i++;
            }
            if(k>=2||judge==1)printf("YES\n");
            else printf("NO\n");
        }
    }
    
    • 1
      @ 2025-12-6 12:21:04

      这题也很简单,可能很多同学不知道为什么k>=2时不然输出YES,其实重点是k2时,只要是两两交换都是必然可以换成递增的,从冒泡排序或者归并排序可以看出来,但是k1时一定NO吗?不一定,很容易知道当它本身就是非递减时,也是输出YES

      • 0
        @ 2025-10-19 16:39:11

        经过思考发现,k>=2时总能实现,选择长度位2的区间进行反转,就是互换这两个数。和冒泡排序一样,总能使其非递减顺序排序

        然而当k == 1时,只有数组初始时非递减,才能满足题意。

        #include <bits/stdc++.h>
        using namespace std;
        #define int long long
        void solve(){
            int n,k; cin >>  n >> k;
            int a[n+10] = {0};
            for(int i = 1; i <= n; i++){
                cin >> a[i];
            }
            if(k==1){
                bool ok = false;
                for(int i = 2; i <= n; i++){
                    if(a[i] != a[i - 1]){
                        ok = true;
                        break;
                    }
                }
                if(ok == 0){
                    cout << "YES" << endl;
                }else{
                    cout << "NO" << endl;
                }
            }else{
                cout << "YES" << endl;
            }
        }
        signed main(){
            ios::sync_with_stdio(0);
            cin.tie(0),cout.tie(0);
            int T=1;
            cin >> T; 
            while(T--){
                solve();
                // cout << fixed << setprecision(6) << n << '\n';
            }
            return 0;
        }
        
        • @ 2025-10-19 16:48:56

          C++实现

          #include <bits/stdc++.h>
          using namespace std;
          #define int long long
          void solve(){
              int n,k; cin >>  n >> k;
              vector<int> a(n+1);
              for(int i = 1; i <= n; i++){
                  cin >> a[i];
              }
              if(k==1){
                  if(is_sorted(a.begin()+1,a.end())){
                      cout << "YES" << endl;
                  }else{
                      cout << "NO" << endl;
                  }
              }else{
                  cout << "YES" << endl;
              }
          }
          signed main(){
              ios::sync_with_stdio(0);
              cin.tie(0),cout.tie(0);
              int T=1;
              cin >> T; 
              while(T--){
                  solve();
                  // cout << fixed << setprecision(6) << n << '\n';
              }
              return 0;
          }
          
      • 1

      信息

      ID
      1150
      时间
      1000ms
      内存
      256MiB
      难度
      7
      标签
      递交数
      125
      已通过
      31
      上传者