• CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes) A.B.C


    A. Two 0-1 Sequences

    题目链接:

    Problem - A - Codeforces

    题面:

     

    题意:

    有一个01串a,b,我们可以对a进行两个操作

    1.使a2变成min(a1,a2),删除a1

    2.使a2变成max(a1,a2),删除a2

    问最后能否使a变成b

    思路:

    如果a串的长度大于b串,就看a1是否等于b1,如果相同就把a2变成a1,删除a1,知道两串长度相同,然后判断是否相同

    代码:

    1. #include
    2. using namespace std;
    3. int main(){
    4. int t;
    5. cin >> t;
    6. while(t--){
    7. int n, m;
    8. cin >> n >> m;
    9. string s, ss;
    10. cin >> s >> ss;
    11. while(n > m){
    12. if(s[0] == ss[0]){
    13. s[1] = s[0];
    14. }
    15. s.erase(0, 1);
    16. n--;
    17. }
    18. if(s == ss){
    19. cout << "YES" << endl;
    20. }else{
    21. cout << "NO" << endl;
    22. }
    23. }
    24. return 0;
    25. }

    B. Luke is a Foodie

    题目链接:

    Problem - B - Codeforces

    题面:

    题意:

    思路:

    由|v-ai|\leqx可得:v\leqx + ai 以及 v\geqai - x,以此我们可以通过如果前一个算出来的范围大于后一个,那么我们缩小范围即可,如果后一个的范围不在第一个里面,那么我们就要更改一次

    代码:

    1. #include
    2. using namespace std;
    3. int arr[200005];
    4. int main(){
    5. int t;
    6. cin >> t;
    7. while(t--){
    8. int n, x;
    9. cin >> n >> x;
    10. for(int i = 0; i < n; i++){
    11. cin >> arr[i];
    12. }
    13. int maxn = x + arr[0];
    14. int minn = arr[0] - x;
    15. int ans = 0;
    16. for(int i = 1; i < n; i++){
    17. int a = x + arr[i];
    18. int b = arr[i] - x;
    19. if(b > maxn || a < minn){
    20. ans++;
    21. maxn = a;
    22. minn = b;
    23. }
    24. if(b >= minn){
    25. minn = b;
    26. }
    27. if(a <= maxn){
    28. maxn = a;
    29. }
    30. }
    31. cout << ans << endl;
    32. }
    33. return 0;
    34. }

    C. Virus

    题目链接:

    Problem - C - Codeforces

    题面:

    题意:

    思路:

    一开始有m个房子被感染,那么就会有m个区间,我们优先选择房子多的区间进行保护,保护一个房子数大于等于3的区间需要两天,大于等于1的需要1天,由此我们可以算出我们最多可以保护的房子数,最后输出总数-保护数即可

    代码:

    1. #include
    2. using namespace std;
    3. int arr[100005];
    4. bool cmp(int a, int b){
    5. return a > b;
    6. }
    7. int main(){
    8. int t;
    9. cin >> t;
    10. while(t--){
    11. int n, m;
    12. cin >> n >> m;
    13. for(int i = 1; i <= m; i++){
    14. cin >> arr[i];
    15. }
    16. if(m == 1){
    17. cout << 2 << endl;
    18. continue;
    19. }
    20. sort(arr + 1, arr + 1 + m);
    21. vector<int> ve;
    22. ve.push_back(arr[1] - 1 + n - arr[m]);
    23. for(int i = 2; i <= m; i++){
    24. ve.push_back(arr[i] - arr[i - 1] - 1);
    25. }
    26. sort(ve.begin(), ve.end(), cmp);
    27. int a = 0;//其他区间以及感染的房子数
    28. int ans = 0;
    29. for(int i = 0; i < ve.size(); i++){
    30. if(ve[i] - a >= 3){
    31. ans += ve[i] - a - 1;
    32. a += 4;
    33. }else if(ve[i] - a >= 1){
    34. ans ++;
    35. a += 2;
    36. }
    37. }
    38. cout << n - ans << endl;
    39. }
    40. return 0;
    41. }

  • 相关阅读:
    iPhone通讯录如何完整导入到新手机
    Https中间人攻击
    数据生态第三弹 | RocketMQ OpenMLDB Connector,实时数据到特征工程的高速传输
    零基础学Linux内核之设备驱动篇(11)_获取设备节点信息
    JS的8种创建对象的方法
    P2181 对角线
    MyBatis——源码解析MyBatis框架底层的执行原理
    [山东科技大学OJ]1634 Problem F: 矩阵的行列交换
    记录.偏僻冷知识
    JavaScript系列之变量
  • 原文地址:https://blog.csdn.net/m0_55682843/article/details/126785046