ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Codeforces Round #712 (Div. 2)

2021-04-08 23:30:35  阅读:125  来源: 互联网

标签:++ scanf Codeforces 712 int printf -- Div else


A. Déjà Vu
题意:插入一个字符‘a’,输出非回文串。
题解:思维。首先全是‘a’肯定不行。往连续’a‘多的一边插入’a’,多的越多,少的越少,那么该字符串就一定不是回文串。

#include<bits/stdc++.h>
using namespace std;
char s[300010];
int main()
{
    int t;scanf("%d", &t);
    while (t--){
        scanf("%s", s);
        int i, l = strlen(s), s1 = 0, s2 = 0;
        for (i = 0; i < l; i++){
            if (s[i] == 'a') s1++;
            else break;
        }
        for (i = l - 1; i >= 0; i--){
            if (s[i] == 'a') s2++;
            else break;
        }
        if (s1 == l) printf("NO\n");
        else{
            if (s1 >= s2){
                printf("YES\n");
                printf("a%s\n", s);
            }
            else{
                printf("YES\n");
                printf("%sa\n", s);
            }
        }
    }
}

B. Flip the Bits
题意:可以翻转任意长度的01个数相同的前缀,使得a与b串相同。
题解:思维。当第i位和第i+1位不同时,不同的部分必须翻转,相同的部分需要在第i+1位时再翻转一次才能恢复原状。所以如果当前位需要翻转但不能翻转时,就不能相同。

#include<bits/stdc++.h>
using namespace std;
char a[300010], b[300010];
int main()
{
    int t, n, i;scanf("%d", &t);
    while (t--){
        scanf("%d%s%s", &n, a, b);
        int x = 0;
        a[n] = b[n] = '0';
        for (i = 0; i < n; i++){
            if (a[i] == '1') x++;
            else x--;
            if ((a[i] == a[i + 1]) != (b[i] == b[i + 1]) && x){//cnt=0表示01个数相同,可以翻转
                printf("NO\n");
                break;
            }
        }
        if (i == n) printf("YES\n");
    }
}

C. Balance the Bits
题意:a、b串都由合法括号组成。如果si=1,ai=bi;si=0,ai!=bi。输出a、b串。
题解:首先判断不能的情况:两端不是1(首尾必须是"()");0的个数不是偶数(奇数会多出一个左括号或右括号)。再就是如何构造,如果是1,让a、b串的前一半为’(’,后一半为’)’;如果是0,第奇数个0时ai为’(’、bi为’)’,第偶数个0时ai为’)’、bi为’(’。

#include<bits/stdc++.h>
using namespace std;
char s[200010], a[200010], b[200010];
int main()
{
    int t, n, i;scanf("%d", &t);
    while (t--){
        scanf("%d%s", &n, s);
        if (s[0] == '0' || s[n - 1] == '0'){
            printf("NO\n");
            continue;
        }
        int cnt0 = 0, cnt1 = 0;
        for (i = 0; i < n; i++)
            if (s[i] == '0') cnt0++;
        if (cnt0 % 2){
            printf("NO\n");
            continue;
        }
        printf("YES\n");
        int c0 = 0, c1 = 0;
        cnt1 = n - cnt0;
        for (i = 0; i < n; i++){
            if (s[i] == '0'){
                c0++;
                if (c0 % 2) a[i] = '(', b[i] = ')';
                else a[i] = ')', b[i] = '(';
            }
            else{
                c1++;
                if (c1 <= cnt1 / 2) a[i] = b[i] = '(';
                else a[i] = b[i] = ')';
            }
        }
        a[n] = b[n] = '\0';//注意加结束符
        printf("%s\n%s\n", a, b);
    }
}

标签:++,scanf,Codeforces,712,int,printf,--,Div,else
来源: https://blog.csdn.net/qq_45900709/article/details/115534065

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有