• Codeforces Round 836 (Div. 2) A - C


    A:SSeeeeiinngg DDoouubbllee

     

    题意:给定一个字符串,每个字符串的字符可以出现两次,要求通过重新排列构造一个回文串

    思路:直接暴力可以,每个字符头部一个尾部一个。

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. #define sc_int(x) scanf("%d", &x)
    11. #define sc_ll(x) scanf("%lld", &x)
    12. #define pr_ll(x) printf("%lld", x)
    13. #define pr_ll_n(x) printf("%lld\n", x)
    14. #define pr_int_n(x) printf("%d\n", x)
    15. #define ll long long
    16. using namespace std;
    17. const int N=1000000+100;
    18. int n ,m,h;
    19. char s[N];
    20. int main()
    21. {
    22. int t;
    23. sc_int(t);
    24. while(t--)
    25. {
    26. cin>>s+1;
    27. int n=strlen(s+1);
    28. for(int i=1;i<=n;i++)
    29. {
    30. s[2*n-i+1]=s[i];
    31. }
    32. for(int i =1;i<=2*n;i++)
    33. cout<
    34. cout<
    35. }
    36. return 0;
    37. }

    B:XOR = Average

    题意:让你构造一个长度为 n 的数组,使得数组的平均值等于数组的异或和。

    思路:由奇数得可以全部都为相同的数,如果是偶数,那么可以数组的平均数都是2,然后第一个2-1放到最后一个2的位置,这样中间的xor都是0,最后的异或的结果也是2,

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. #define sc_int(x) scanf("%d", &x)
    11. #define sc_ll(x) scanf("%lld", &x)
    12. #define pr_ll(x) printf("%lld", x)
    13. #define pr_ll_n(x) printf("%lld\n", x)
    14. #define pr_int_n(x) printf("%d\n", x)
    15. #define ll long long
    16. using namespace std;
    17. const int N=1000000+100;
    18. int n ,m,h;
    19. ll s[N];
    20. int main()
    21. {
    22. int t;
    23. sc_int(t);
    24. while(t--)
    25. {
    26. ll res=0;
    27. cin>>n;
    28. if(n%2!=0)
    29. {
    30. for(int i =1;i<=n;i++)
    31. cout<" ";
    32. }
    33. else
    34. {
    35. cout<<1<<" ";
    36. for(int i =2;i
    37. cout<<2<<" ";
    38. }
    39. cout<<3<<" ";
    40. }
    41. cout<
    42. }
    43. return 0;
    44. }

    C: Almost All Multiples

    题意:给你一个x和n,让你构造一个长度为n的数组并且第一个数是x最后一个是1并且数组的每一位要保证能够取余i。并且构造这个字典序最小的数组,如果没有就输出-1.

    思路:首先如果x" role="presentation">x,那么在除了x和1之外的每个元素都不能让位置给n,那么一定就构造不了。

    否则可以构造一个数组,就是x和n的位置互换的情况,然后要考虑最小的字典序的情况,即n的位置尽可能的跟后面的数字交换(要换的数能整除当前n的下标并且n能整除要换的数的下标),直接暴力搜一遍就可以了。

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. #define sc_int(x) scanf("%d", &x)
    11. #define sc_ll(x) scanf("%lld", &x)
    12. #define pr_ll(x) printf("%lld", x)
    13. #define pr_ll_n(x) printf("%lld\n", x)
    14. #define pr_int_n(x) printf("%d\n", x)
    15. #define ll long long
    16. using namespace std;
    17. const int N=1000000+100;
    18. int n ,m,h;
    19. ll s[N];
    20. int main()
    21. {
    22. int t;
    23. sc_int(t);
    24. while(t--)
    25. {
    26. sc_int(n),sc_int(m);
    27. if(n%m!=0){
    28. cout<<-1<
    29. continue;
    30. }
    31. else
    32. for(int i =1;i<=n;i++)
    33. {
    34. if(i==1)s[i]=m;
    35. else if(i==n)s[i]=1;
    36. else if(i==m)s[i]=n;
    37. else s[i]=i;
    38. }
    39. int l=m,lx=s[l];
    40. for(int i =m+1;i<=n;i++)
    41. {
    42. if(s[i]%l==0&&lx%i==0)
    43. {
    44. swap(s[i],s[l]);
    45. l=i;
    46. }
    47. }
    48. for(int i =1;i<=n;i++)
    49. cout<" ";
    50. cout<
    51. }
    52. return 0;
    53. }

    D题自己写出来了但是思路不好说,因为我自己是打表找出来的规律(欸嘿~),感觉这次的构造题都挺考验打表的,以后还是继续努力吧!

  • 相关阅读:
    基于量子随机游走的图像加密算法
    centos docker下安装Minio服务
    B3627 立方根
    flink中cpu消耗的大户-序列化和反序列化
    NIO Selector选择器
    矩阵相乘详解
    如何从 Mac Studio 恢复丢失的数据?以下是 4 种 Mac Studio 恢复方法
    微信小程序带来了新的创业机会?
    ESP32(基于Arduino)连接EMQX的Mqtt服务器上传信息与命令控制
    【MedusaSTears】正则表达式搜索心得
  • 原文地址:https://blog.csdn.net/jikelk/article/details/128055700