首页 > 其他 > 详细

1511D. Min Cost String

时间:2021-04-25 23:26:34      阅读:27      评论:0      收藏:0      [点我收藏+]

D. Min Cost String


需求数组放在char res[]里。

  • 理解过后不难看出要求构造一个字符串,字符串要求Si+S(i+1) != Sj+S(j+1)。

  • 最初理解是将a放在res[0]里,后面依次放入一对与前面不同的字符,如k==4的时候字符串为aabacadbcbdcd。--wa了直接--

  • 画图分析以后发现每到达下一个字母时应该把当前字母也放进去k=4的时候就变成了aabacadbbcbdccddd。--ac了直接--

上Google看别的代码的时候发现这个好像叫欧拉回路大小为k * k--(完全看不懂--。


ac??

#include<iostream>
#include<algorithm>

using namespace std;

const int N = 1000010;

int n;
int k;
char res[N];
int idx1 = 0,idx2 = 1;
int m;

int main(){
    cin >> n >> k;
    
    if(k >= n){
        for(int i = 0;i < n;i ++) printf("%c",‘a‘ + i);
        return 0;
    }
    
    m = k * (k - 1) >> 1;
    
    res[0] = ‘a‘;
    
    for(int i = 1;i <= min(m * 2 + k,n);i += 2){
        res[i] = ‘a‘ + idx1;
        res[i + 1] = ‘a‘ + idx2 ++;
        if(idx2 == k){
            idx1 ++;
            i += 2;
            res[i] = ‘a‘ + idx1;
            i --;
            idx2 = idx1 + 1;
        }
    }
    
    for(int i = 0,cnt = 0;i < n;i ++){
        printf("%c",res[cnt ++]);
        if(cnt >= m * 2 + k) cnt = 0;
    }
    
    return 0;
}

1511D. Min Cost String

原文:https://www.cnblogs.com/Xuuxxi/p/14701696.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!