Submission

Status:

[PPPPPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: kimza

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

Language: cpp

Time: 0.002 second

Submitted On: 2026-03-10 11:46:37

#include <bits/stdc++.h>
using namespace std;

int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int n, m;
    if (!(cin >> n >> m)) return 0;

    // v เก็บคำและความยาว
    vector<pair<string, int>> v;
    for (int i = 0; i < n; i++) {
        string s;
        cin >> s;
        v.push_back({s, (int)s.size()});
    }

    int iidx = 0;
    int sum = 0;
    int spacecnt = 0;
    vector<vector<string>> ns;
    ns.push_back({}); 
    for (int i = 0; i < v.size(); i++) {

        if (sum + spacecnt + v[i].second > m && !ns[iidx].empty()) {
            iidx++;
            ns.push_back({});
            sum = 0;
            spacecnt = 0;
        }
        ns[iidx].push_back(v[i].first);
        sum += v[i].second;
        spacecnt++;
    }
    int cnt = ns.size();
    for (int j = 0; j < cnt; j++) {
        int sizes = 0;
        for (string s : ns[j]) sizes += s.size();
        
        int sc = ns[j].size(); 
        int reqspace = m - sizes; 
        if (j == cnt - 1 || sc == 1) {
            for (int i = 0; i < sc; i++) {
                cout << ns[j][i];
                if (i < sc - 1) {
                    cout << " ";
                    reqspace--;
                }
            }
            while (reqspace-- > 0) cout << " ";
        } 
        else {
            int gap_count = sc - 1; 
            int nrs = reqspace / gap_count; 
            int extra = reqspace % gap_count;   

            for (int i = 0; i < sc; i++) {
                cout << ns[j][i];
                if (i < gap_count) {
                    int spaces_to_print = nrs + (i < extra ? 1 : 0);
                    for (int k = 0; k < spaces_to_print; k++) cout << " ";
                }
            }
        }
        cout << "\n";
    }

    return 0;
}