• D. Sequence and Swaps(思维)


    Problem - 1455D - Codeforces

     

    你的任务是使该序列排序(如果条件a1≤a2≤a3≤⋯≤an成立,它就被认为是排序的)。

    为了使序列排序,你可以执行以下操作的任何次数(可能是零):选择一个整数i,使1≤i≤n且ai>x,并交换ai和x的值。

    例如,如果a=[0,2,3,5,4],x=1,就可以进行以下操作序列。

    选择i=2(这是可能的,因为a2>x),那么a=[0,1,3,5,4],x=2。
    选择i=3(因为a3>x,所以有可能),然后a=[0,1,2,5,4],x=3。
    选择i=4(因为a4>x,所以有可能),然后a=[0,1,2,3,4],x=5。
    计算你必须执行的最小操作数,以使a成为排序的,或者报告说这是不可能的。

    输入
    第一行包含一个整数t(1≤t≤500)--测试案例的数量。

    每个测试用例由两行组成。第一行包含两个整数n和x(1≤n≤500,0≤x≤500)--序列中元素的数量和x的初始值。

    第二行包含n个整数a1,a2,...,an(0≤ai≤500)。

    在输入的所有测试案例中,n的值之和不超过500。

    输出
    对于每个测试案例,打印一个整数--你必须执行的最小操作数,如果不可能,则打印-1。

    例子
    inputCopy
    6
    4 1
    2 3 5 4
    5 6
    1 1 3 4 4
    1 10
    2
    2 10
    11 9
    2 10
    12 11
    5 18
    81 324 218 413 324
    输出拷贝

    3

    0

    0

    -1

    1

    3

    题解:
    由于n的范围很小我们可以考虑暴力的方法,通过观察我们发现,如果出现a[i] > a[i+1]

    如果可以修改结果就会变为a[i] = a[i-1] a[i-1] = a[i-2] .... a[i-k] = x

    x = a[i]

    x是在不断变大的,我们只需要模拟这个过程即可,并且每次check是否为非降序排列

    1. #include<iostream>
    2. #include<algorithm>
    3. #include<cstring>
    4. #include<string>
    5. #include<map>
    6. #include<vector>
    7. #include<queue>
    8. using namespace std;
    9. #define int long long
    10. int a[505];
    11. int n,x;
    12. int check()
    13. {
    14. for(int i = 2;i <= n;i++)
    15. {
    16. if(a[i] < a[i-1])
    17. {
    18. return 0;
    19. }
    20. }
    21. return 1;
    22. }
    23. void solve()
    24. {
    25. // int n,x;
    26. cin >> n >> x;
    27. for(int i = 1;i <= n;i++)
    28. {
    29. cin >> a[i];
    30. }
    31. if(check())
    32. {
    33. cout<<"0\n";
    34. return ;
    35. }
    36. int ans = 0;
    37. for(int i = 1;i <= n;i ++)
    38. {
    39. if(a[i] > x)
    40. {
    41. swap(a[i],x);
    42. ans++;
    43. }
    44. if(check())
    45. {
    46. cout<<ans<<"\n";
    47. return ;
    48. }
    49. }
    50. cout<<"-1\n";
    51. }
    52. signed main()
    53. {
    54. int t = 1;
    55. cin >> t;
    56. while(t--)
    57. {
    58. solve();
    59. }
    60. }

  • 相关阅读:
    vcpkgC++开源项目1
    Neo4j源码研究系列 - 源代码准备
    .NET周刊【6月第5期 2024-06-30】
    随机森林算法
    spring boot 将配置文件信息 赋值到类注解
    Python 无废话-办公自动化Excel格式美化
    Linux总结 有这一篇就够(呕心狂敲37k字,只为博君一点赞)
    Docker-consul容器服务更新与发现
    [Vulnhub] lazysysadmin
    python打包原理
  • 原文地址:https://blog.csdn.net/m0_64158084/article/details/127982534