[CF Contest] Codeforces Subsequences 題解

這題目怕不是有毒,,,樣例萬惡之源...c++

直接致使有人在谷羣內詢問如何在 1s 內輸出 \(10^{16}\) 個字符。數組


好了說題解。spa

首先讀題,不難發現是最少 \(k\) 個子串。咱們開一個數組,存儲 codeforces 每個字母要輸出幾個。code

顯然的,每一個字母的數量應該儘量接近對方,這樣就能夠使子串的數量儘量多,如今能夠簡單地經過增長的方法獲得最優分佈,好比輸出 cccdddeeefffooorrreeesss 之類的字符串。ci

具體實現請查看代碼。字符串

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    ll k,cnt=1,a[15];
    string s="codeforces";
    cin>>k;
    for(int i=0;i<10;i++)a[i]=1;
    while(cnt<k) {
        for(int i=0;i<10;i++){
            if(cnt<k){
                cnt/=a[i],
                cnt*=a[i]+1,
                a[i]++;			//對每一個字符進行處理
            }else break;
        }
    }
    for(int i=0;i<10;i++)
        for(int j=1;j<=a[i];j++)
        	cout<<s[i];
    return 0;
}
相關文章
相關標籤/搜索