Submission

Status:

[PPPPPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: C12

Problemset: การจัดแนวข้อความ

Language: cpp

Time: 0.002 second

Submitted On: 2026-03-09 16:05:27

#include <bits/stdc++.h>

using namespace std;

const int mod = 1e9+7;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    int n,k;

    cin >> n >> k;

    vector<string> s(n+1);
    s[0] = "";
    for(int i = 1;i <= n;i++) cin >> s[i];

    vector<int> len(n+1);
    for(int i = 0;i <= n;i++) len[i] = s[i].length();
    for(int i = 1;i <= n;i++) len[i] += len[i-1];

    // return 0;

    int last = 0;

    vector<int> out;

    while(last < n){
        int sum = 0;
        int now = last+1;
        while(now <= n && (len[now] - len[last]) + (now-last-1) <= k){
            now++;
        }
        out.push_back(now-1);
        last = now-1;
    }
    if(last+1 == n){
        cout << '\t' << out.back() << '\n';
        out.push_back(n);
    }
    // return 0;

    last = 0;
    char pri = ' ';
    for(int i = 0;i < out.size()-1;i++){
        int mx = out[i];
        float st = k - (len[mx] - len[last]);
        // cerr << mx << '\n';
        for(int j = last+1;j <= mx;j++){
            cout << s[j];
            
            if(mx - last == 1){
                cout << string(k - (len[mx] - len[last]),pri);
            }
            else{
                if(j < mx){
                    float point = st / (mx-j);

                    cout << string(ceil(point),pri);
                    st -= ceil(point);
                }
            }
        }
        cout << '\n';
        last = mx;
    }

    int mx = out.back();
    for(int j = last+1;j <= mx;j++){
        cout << s[j] << pri;
    }

    return 0;
}

/*

7 16
This is an example of text justification.

6 16
What must be acknowledgement shall be

*/