Submission

Status:

[PPPPPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: Few500

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

Language: cpp

Time: 0.002 second

Submitted On: 2026-03-21 14:10:27

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <queue>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n, m;
    cin >> n >> m;
    queue<string> words;
    for (int i = 0; i < n; i++)
    {
        string w;
        cin >> w;
        words.push(w);
    }

    vector<vector<string>> Lines;
    vector<string> answer;

    vector<string> curr_line;
    int curr_len = 0;
    while (!words.empty())
    {
        string curr_word = words.front();
        words.pop();
        if (curr_line.empty() || curr_len + 1 + curr_word.size() <= m)
        {
            curr_line.push_back(curr_word);
            curr_len += curr_word.size() + (curr_line.size() > 1 ? 1 : 0);
        }
        else
        {
            Lines.push_back(curr_line);
            curr_line = {curr_word};
            curr_len = curr_word.size();
        }
    }
    if (!curr_line.empty())
        Lines.push_back(curr_line);

    for (int j = 0; j < Lines.size() - 1; j++)
    {
        vector<string> line = Lines[j];
        curr_len = 0;
        int len = line.size();
        for (auto word : line)
            curr_len += word.size();
        while (curr_len < m && len != 1)
        {
            for (int i = 0; i < len - 1 && curr_len < m; i++)
            {
                line[i] += " ";
                curr_len++;
            }
        }
        while(len == 1 && curr_len < m){
            line[0] += " ";
            curr_len++;
        }
        string l = "";
        for (auto word : line)
            l += word;
        answer.push_back(l);
    }

    string l = "";
    for(int i = 0; i < Lines[Lines.size() - 1].size() - 1; i++){
        string word = Lines[Lines.size() - 1][i];
        l += word + " ";
    }

    l += Lines[Lines.size()-1][Lines[Lines.size()-1].size()-1];
    int len = l.size();
    while(len < m){
        l += " ";
        len++;
    }

    answer.push_back(l);

    for (auto x : answer)
        cout << x << '\n';
    return 0;
}