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;
}