zoukankan      html  css  js  c++  java
  • codeforce 1474A Puzzle From the Future 模拟 C

    codeforce 1474A Puzzle From the Future 模拟 C
    A. Puzzle From the Future
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    In the 20222022 year, Mike found two binary integers aa and bb of length nn (both of them are written only by digits 00 and 11) that can have leading zeroes. In order not to forget them, he wanted to construct integer dd in the following way:

    • he creates an integer cc as a result of bitwise summing of aa and bwithout transferring carry, so cc may have one or more 22-s. For example, the result of bitwise summing of 01100110 and 11011101 is 12111211 or the sum of 011000011000 and 011000011000 is 022000022000;
    • after that Mike replaces equal consecutive digits in cc by one digit, thus getting dd. In the cases above after this operation, 12111211 becomes 121121 and 022000022000 becomes 020020 (so, dd won't have equal consecutive digits).

    Unfortunately, Mike lost integer aa before he could calculate dd himself. Now, to cheer him up, you want to find any binary integer aa of length nn such that dd will be maximum possible as integer.

    Maximum possible as integer means that 102>21102>21, 012<101012<101, 021=21021=21 and so on.

    Input

    The first line contains a single integer tt (1t10001≤t≤1000) — the number of test cases.

    The first line of each test case contains the integer nn (1n1051≤n≤105) — the length of aa and bb.

    The second line of each test case contains binary integer bb of length nn. The integer bb consists only of digits 00 and 11.

    It is guaranteed that the total sum of nn over all tt test cases doesn't exceed 105105.

    Output

    For each test case output one binary integer aa of length nn. Note, that aa or bb may have leading zeroes but must have the same length nn.

    Example
    input
    Copy
    5
    1
    0
    3
    011
    3
    110
    6
    111000
    6
    001011
    
    output
    Copy
    1
    110
    100
    101101
    101110
    
    Note

    In the first test case, b=0b=0 and choosing a=1a=1 gives d=1d=1 as a result.

    In the second test case, b=011b=011 so:

    • if you choose a=000a=000, cc will be equal to 011011, so d=01d=01;
    • if you choose a=111a=111, cc will be equal to 122122, so d=12d=12;
    • if you choose a=010a=010, you'll get d=021d=021.
    • If you select a=110a=110, you'll get d=121d=121.
    We can show that answer a=110a=110 is optimal and d=121d=121 is maximum possible.

    In the third test case, b=110b=110. If you choose a=100a=100, you'll get d=210d=210 and it's the maximum possible dd.

    In the fourth test case, b=111000b=111000. If you choose a=101101a=101101, you'll get d=212101d=212101 and it's maximum possible dd.

    In the fifth test case, b=001011b=001011. If you choose a=101110a=101110, you'll get d=102121d=102121 and it's maximum possible dd.

    分析

    题目要求最大,肯定先以位数优先

    所以不能和前一位相同

    那么第一个最大是2,形成不了2就用1

    再就是前面和后面不能一样

    代码

    https://codeforces.com/contest/1474/submission/105585368

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    #include <math.h>
    #include <string.h>
    #include <algorithm>
    #include <iostream>
    #include <string>
    #include <sstream>
    #include <iostream>
    #include <time.h>
    #include <queue>
    #include <list>
    #include <map>
    #include <set>
    #include <vector>
    #include <stack>
    #include <string.h>
    #include <bitset>
    #define sf scanf
    #define pf printf
    #define lf double
    #define p123 printf("123
    ");
    #define pn printf("
    ");
    #define pk printf(" ");
    #define p(n) printf("%d",n);
    #define pln(n) printf("%d
    ",n);
    #define s(n) scanf("%d",&n);
    #define ss(n) scanf("%s",n);
    #define ps(n) printf("%s",n);
    #define sld(n) scanf("%lld",&n);
    #define pld(n) printf("%lld",n);
    #define slf(n) scanf("%lf",&n);
    #define plf(n) printf("%lf",n);
    #define sc(n) scanf("%c",&n);
    #define pc(n) printf("%c",n);
    #define gc getchar();
    #define ll long long
    #define re(n,a) memset(n,a,sizeof(n));
    #define len(a) strlen(a)
    #define eps 1e-13
    #define zero(x) (((x) > 0? (x):(-x)) < eps)
    using namespace std;
    char a[200000];
    int main(){
        int t;
        s(t)
        while(t --){
            int n;
            s(n) gc
            ss(a)
            //cin >> s;
            int temp = 0;
            for(int i = 0;  i< n; i ++){
                if(temp == 2){
                    if(a[i] == '1'){
                        p(0)
                        temp = 1;
                    }else if(a[i] == '0'){
                        p(1)
                        temp = 1;
                    }
                }else if(temp == 1){
                    if(a[i] == '1'){
                        p(1)
                        temp = 2;
                    }else if(a[i] == '0'){
                        p(0)
                        temp = 0;
                    }
                }else if(temp == 0){
                    if(a[i] == '1'){
                        p(1)
                        temp = 2;
                    }else if(a[i] == '0'){
                        p(1)
                        temp = 1;
                    }
                }
            }
            pn
    
        }
        return 0;
    }
  • 相关阅读:
    redis配置文件redis.conf总结
    react井字棋小游戏实现及优化
    springboot 如何在请求进入controller之前改变body中的值
    记录一个Springboot启动的问题->sprinboot正常启动但是tomcat却没有启动
    websocket-基于springboot的简单实现
    JVM-垃圾回收
    gRPC-Java实践
    Protocol Buffers—-java
    串口通信学习-基础
    Modbus通信协议学习
  • 原文地址:https://www.cnblogs.com/Kidgzz/p/14342018.html
Copyright © 2011-2022 走看看