• SGU 546 解题报告


    题意:给定一个序列,告诉你里面要有多少个0 和 1  要求替换次数最小得出要求序列

    解题思路:模拟替换

    解题代码:

    // File Name: e.c
    // Author: darkdream
    // Created Time: 2013年07月17日 星期三 09时41分24秒
    
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<time.h>
    #include<math.h>
    #include<ctype.h>
    char str[10000];
    int visit[10000];
    int main(){
    
        //freopen("/home/plac/problem/input.txt","r",stdin);
        //freopen("/home/plac/problem/output.txt","w",stdout);
        int n, a , b; 
        while(scanf("%d %d %d",&n,&a,&b) != EOF)
        {
            memset(str,0,sizeof(str));
            scanf("%s",str);
            int suma = 0 ;
            int sumb = 0 ;
            int sum = 0 ;
            int i,j;
            for(i = 0 ;i < n;i ++)
            {
                if(str[i] == '0')
                {
                    if(suma != a )
                        suma ++;
                    else 
                        break;
                }
    
    
            }
            for(j =0 ;j < n;j ++)
            {
                if(str[j] == '1')
                {
                    if(sumb != b)
                        sumb ++;
                    else break;
    
                }
    
            }
            for(; i < n;i ++)
            {
                if(str[i] == '0')
                {
                    if(sumb == b)
                    {    str[i] = '2';
                        sum ++;
                    }
                    else
                    {    
                        sum++;
                        str[i] = '1';
                        sumb ++;
                    }
                }
            }
            for(; j < n; j++)
            {
                if(str[j] == '1')
                {
                    if(suma == a)
                    {
                      sum ++;
                     str[j] = '2';
                    }
                    else
                    {
                        sum ++;
                        str[j] = '0';
                        suma ++;
                    }
                }
            }
            for(i = 0 ;i < n;i ++)
            {
                if(str[i] == '2')
                { 
                  if(sumb < b)
                    {
                        sum ++;
                        str[i] = '1';
                        sumb ++;
                        continue;
                    }
    
                    if(suma < a)
                    {
                        sum ++;
                        str[i] = '0';
                        suma ++;
                        continue;
                    }
                }
            }
    
            if(a + b  > n )
            {
                printf("-1
    ");
            }
            else
            {
                printf("%d
    ",sum);
                printf("%s
    ",str);
            }
        }
        return 0 ;
    }
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    MySQL
    Date和String转换
    Spring-test事务自动回滚
    java多线程:生产者和消费者模式(wait-notify) : 单生产和单消费
    制作ISO文件 与 提取ISO文件
    windows10 更换密码
    win 添加网络位置共享 && win 实用快捷键
    ubuntu16 安装mysql5.7
    ubuntu16 中chkconfig 命令不能使用
    mysql 5.7 初始化密码或随机密码
  • 原文地址:https://www.cnblogs.com/zyue/p/3198339.html
Copyright © 2020-2023  润新知