zoukankan      html  css  js  c++  java
  • hihocoder1327 分隔相同字符贪心

    题意:给出一个字符串进行重新排列,要求相邻的字符串不能相同,问最字典序最小的字符串是什么

    题解:贪心,统计一下每一个字符出现的次数,每次取一个不能和前一个字符相等的最小的字符并且剩下的字符要能排列成一个题目要求的字符串

    #include <bits/stdc++.h>
    #define ll long long
    #define maxn 100100
    using namespace std;
    char s[maxn];
    int a[300];
    int check(char ch){
        if(a[ch] == 0) return 0;
        int sum = 0, ma = 0;
        for(int i='a';i<='z';i++){
            sum += a[i];
            ma = max(ma, i==ch?(a[i]-1):a[i]);
        }
        if(2*ma>sum) return 0;
        else return 1;
    }
    int main(){
        int l, num=1;
        scanf("%s", s);
        l = strlen(s);
        memset(a, 0, sizeof(a));
        for(int i=0;i<l;i++) a[s[i]]++;
        s[0] = '.';
        while(1){
            int i;
            for(i='a';i<='z';i++){
                if(check(i)&&(i!=s[num-1])){
                    a[i]--;
                    s[num++] = i;
                    break;
                }
            }
            if(i>'z') break;
        }
        if(num-1 == l) printf("%s
    ", s+1);
        else printf("INVALID
    ");
        //main();
        return 0;
    }
  • 相关阅读:
    OCP-1Z0-051-V9.02-55题
    OCP-1Z0-051-V9.02-60题
    OCP-1Z0-053-V12.02-59题
    OCP-1Z0-053-V12.02-184题
    OCP-1Z0-053-V12.02-595题
    OCP-1Z0-053-V12.02-584题
    OCP-1Z0-053-V12.02-234题
    OCP-1Z0-053-V12.02-548题
    OCP-1Z0-053-V12.02-549题
    OCP-1Z0-053-V12.02-551题
  • 原文地址:https://www.cnblogs.com/Noevon/p/7440174.html
Copyright © 2011-2022 走看看