zoukankan      html  css  js  c++  java
  • URAL 1007 Code Words

    URAL_1007

        按题目的要求依次检查各个可能出错的位置即可。

    #include<stdio.h>
    #include<string.h>
    #define MAXD 1010
    int N, M, A[MAXD], S;
    char b[MAXD];
    void checkreplace()
    {
        int i, j, k;
        for(i = 0; i < M; i ++)
            if(b[i] == '1' && (S - i - 1) % (N + 1) == 0)
            {
                b[i] = '0';
                printf("%s\n", b);
                return ;
            }
    }
    void checkremove()
    {
        int i, j, k;
        for(i = 0; i < M; i ++)
        {
            if((S + A[i]) % (N + 1) == 0)
            {
                for(j = 0; j < i; j ++)
                    printf("%c", b[j]);
                printf("0");
                for(j = i; j < M; j ++)
                    printf("%c", b[j]);
                printf("\n");
                return ;
            }
            if((S + A[i] + i + 1) % (N + 1) == 0)
            {
                for(j = 0; j < i; j ++)
                    printf("%c", b[j]);
                printf("1");
                for(j = i; j < M; j ++)
                    printf("%c", b[j]);
                printf("\n");
                return ;
            }
        }
        printf("%s", b);
        if(S % (N + 1) == 0)
            printf("0\n");
        else
            printf("1\n");
    }
    void checkinsert()
    {
        int i, j, k;
        for(i = 0; i < M; i ++)
            if((b[i] == '1' && (S - i - A[i]) % (N + 1) == 0) || (b[i] == '0' && (S - A[i]) % (N + 1) == 0))
            {
                b[i] = '\0';
                printf("%s", b);
                printf("%s\n", b + i + 1);
                return ;
            }
    }
    void solve()
    {
        int i, j, k;
        M = strlen(b);
        A[M] = S = 0;
        for(i = M - 1; i >= 0; i --)
        {
            A[i] = A[i + 1] + b[i] - '0';
            if(b[i] == '1')
                S += i + 1;
        }
        if(N == M)
        {
            if(S % (N + 1) == 0)
                printf("%s\n", b);
            else
                checkreplace();
        }
        else if(M < N)
            checkremove();
        else
            checkinsert();
    }
    int main()
    {
        scanf("%d", &N);
        while(scanf("%s", b) == 1)
        {
            solve();
        }
        return 0;
    }
  • 相关阅读:
    Loading CSS without blocking render
    总结Web应用中基于浏览器的安全漏洞
    React Native通信机制详解
    HTML Imports
    编程语言和它们的创造者
    USB Transfer and Packet Sizes
    灰色心情
    c++ 深入理解虚函数
    在VS2012中采用C++中调用DLL中的函数(4)
    在C++中调用DLL中的函数(3)
  • 原文地址:https://www.cnblogs.com/staginner/p/2477246.html
Copyright © 2011-2022 走看看