#include <iostream>
#include <cstring>
using namespace std;
const int LINE_CHARS_MAX = 20 ;
void wordInLine( int & isWordInLineParam, int iParam,
char lineParam[ LINE_CHARS_MAX + 1 ] ,
char wordParam[ LINE_CHARS_MAX + 1 ] , int & lineLengthParam,
int wordLengthParam, int & lineWordsNoParam) {
isWordInLineParam = 1 ;
if ( iParam == 1 ) {
strcat ( lineParam, wordParam) ;
} else {
strcat ( lineParam,"*" ) ;
++ lineLengthParam;
strcat ( lineParam, wordParam) ;
}
lineLengthParam + = wordLengthParam;
++ lineWordsNoParam;
}
void linesFinish( int & isWordInLineParam, int & iParam,
/*
cosmin
2025-01-04 23:55:37
split this function into multiple functions and make the code more easier to understand. Make a function that prints a word, a function that prints a sequence of *
*/
char lineParam[ LINE_CHARS_MAX + 1 ] ,
char wordParam[ LINE_CHARS_MAX + 1 ] , int & lineLengthParam,
int & lineWordsNoParam, int & versColumnsNoParam,
int & lineNoParam, int & versLinesNoParam, int & wordsNoParam) {
int interspacesNo = 0 , spacesLeftNo = 0 ;
if ( lineWordsNoParam > 1 ) {
interspacesNo = ( versColumnsNoParam - lineLengthParam +
lineWordsNoParam - 1 ) / ( lineWordsNoParam - 1 ) ;
spacesLeftNo = ( versColumnsNoParam - lineLengthParam +
lineWordsNoParam - 1 ) % ( lineWordsNoParam - 1 ) ;
}
char * p = strchr ( lineParam, '*' ) , lineBuilder[ LINE_CHARS_MAX + 1 ] ;
int lineLastPos = - 1 , j = - 1 ;
lineBuilder[ 0 ] = '\0 ' ;
while ( p) {
int currentPos = p - lineParam;
for ( int k = lineLastPos + 1 ; k < currentPos; ++ k) {
lineBuilder[ ++ j] = lineParam[ k] ;
lineLastPos = k + 1 ;
}
for ( int k = currentPos; k < currentPos + interspacesNo; ++ k) {
lineBuilder[ ++ j] = '*' ;
}
if ( spacesLeftNo > 0 ) {
lineBuilder[ ++ j] = '*' ;
-- spacesLeftNo;
}
p = strchr ( p + 1 , '*' ) ;
}
for ( int k = lineLastPos + 1 ; k <= lineLengthParam; ++ k) {
lineBuilder[ ++ j] = lineParam[ k] ;
}
strcpy ( lineParam, lineBuilder) ;
cout << lineParam;
if ( isWordInLineParam == 0 ) {
if ( lineNoParam == versLinesNoParam) {
cout << "\n " ;
lineNoParam = 0 ;
}
++ lineNoParam;
strcpy ( lineParam, wordParam) ;
lineWordsNoParam = 1 ;
lineLengthParam = strlen ( lineParam) ;
lineLastPos = - 1 ;
cout << "\n " ;
if ( iParam == wordsNoParam) {
cout << lineParam;
}
}
}
int main( ) {
int wordsNo, versLinesNo, versColumnsNo;
cin >> wordsNo >> versLinesNo >> versColumnsNo;
char word[ LINE_CHARS_MAX + 1 ] ;
char line[ LINE_CHARS_MAX + 1 ] ;
line[ 0 ] = '\0 ' ;
int lineWordsNo = 0 , lineNo = 1 ;
for ( int i = 1 ; i <= wordsNo; ++ i) {
cin >> word;
int wordLength = strlen ( word) , lineLength = strlen ( line) ;
int isWordInLine = 0 ;
if ( lineLength + wordLength < versColumnsNo) {
wordInLine( isWordInLine, i, line, word, lineLength, wordLength,
lineWordsNo) ;
}
if ( i == wordsNo || ( i < wordsNo && isWordInLine == 0 ) ) {
linesFinish( isWordInLine, i, line, word, lineLength, lineWordsNo,
versColumnsNo, lineNo, versLinesNo, wordsNo) ;
}
}
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBMSU5FX0NIQVJTX01BWCA9IDIwOwoKdm9pZCB3b3JkSW5MaW5lKGludCAmaXNXb3JkSW5MaW5lUGFyYW0sIGludCBpUGFyYW0sIAogICAgICAgICAgICAgICAgY2hhciBsaW5lUGFyYW1bTElORV9DSEFSU19NQVggKyAxXSwgCiAgICAgICAgICAgICAgICBjaGFyIHdvcmRQYXJhbVtMSU5FX0NIQVJTX01BWCArIDFdLCBpbnQgJmxpbmVMZW5ndGhQYXJhbSwgCiAgICAgICAgICAgICAgICBpbnQgd29yZExlbmd0aFBhcmFtLCBpbnQgJmxpbmVXb3Jkc05vUGFyYW0pIHsKICAgIGlzV29yZEluTGluZVBhcmFtID0gMTsKICAgIGlmIChpUGFyYW0gPT0gMSkgewogICAgICAgIHN0cmNhdChsaW5lUGFyYW0sIHdvcmRQYXJhbSk7CiAgICB9IGVsc2UgewogICAgICAgIHN0cmNhdChsaW5lUGFyYW0sIioiKTsKICAgICAgICArK2xpbmVMZW5ndGhQYXJhbTsKICAgICAgICBzdHJjYXQobGluZVBhcmFtLCB3b3JkUGFyYW0pOwogICAgfQogICAgbGluZUxlbmd0aFBhcmFtICs9IHdvcmRMZW5ndGhQYXJhbTsKICAgICsrbGluZVdvcmRzTm9QYXJhbTsKfQoKdm9pZCBsaW5lc0ZpbmlzaChpbnQgJmlzV29yZEluTGluZVBhcmFtLCBpbnQgJmlQYXJhbSwgCi8qCmNvc21pbgoyMDI1LTAxLTA0IDIzOjU1OjM3CnNwbGl0IHRoaXMgZnVuY3Rpb24gaW50byBtdWx0aXBsZSBmdW5jdGlvbnMgYW5kIG1ha2UgdGhlIGNvZGUgbW9yZSBlYXNpZXIgdG8gdW5kZXJzdGFuZC4gTWFrZSBhIGZ1bmN0aW9uIHRoYXQgcHJpbnRzIGEgd29yZCwgYSBmdW5jdGlvbiB0aGF0IHByaW50cyBhIHNlcXVlbmNlIG9mICoKKi8KICAgICAgICAgICAgICAgICBjaGFyIGxpbmVQYXJhbVtMSU5FX0NIQVJTX01BWCArIDFdLCAKICAgICAgICAgICAgICAgICBjaGFyIHdvcmRQYXJhbVtMSU5FX0NIQVJTX01BWCArIDFdLCBpbnQgJmxpbmVMZW5ndGhQYXJhbSwgCiAgICAgICAgICAgICAgICAgaW50ICZsaW5lV29yZHNOb1BhcmFtLCBpbnQgJnZlcnNDb2x1bW5zTm9QYXJhbSwgCiAgICAgICAgICAgICAgICAgaW50ICZsaW5lTm9QYXJhbSwgaW50ICZ2ZXJzTGluZXNOb1BhcmFtLCBpbnQgJndvcmRzTm9QYXJhbSkgewogICAgaW50IGludGVyc3BhY2VzTm8gPSAwLCBzcGFjZXNMZWZ0Tm8gPSAwOwogICAgaWYgKGxpbmVXb3Jkc05vUGFyYW0gPiAxKSB7CiAgICAgICAgaW50ZXJzcGFjZXNObyA9ICh2ZXJzQ29sdW1uc05vUGFyYW0gLSBsaW5lTGVuZ3RoUGFyYW0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgbGluZVdvcmRzTm9QYXJhbSAtIDEpIC8gKGxpbmVXb3Jkc05vUGFyYW0gLSAxKTsKICAgICAgICBzcGFjZXNMZWZ0Tm8gPSAodmVyc0NvbHVtbnNOb1BhcmFtIC0gbGluZUxlbmd0aFBhcmFtICsgCiAgICAgICAgICAgICAgICAgICAgICAgbGluZVdvcmRzTm9QYXJhbSAtIDEpICUgKGxpbmVXb3Jkc05vUGFyYW0gLSAxKTsKICAgIH0KICAgIGNoYXIgKnAgPSBzdHJjaHIobGluZVBhcmFtLCAnKicpICwgbGluZUJ1aWxkZXJbTElORV9DSEFSU19NQVggKyAxXTsKICAgIGludCBsaW5lTGFzdFBvcyA9IC0xLCBqID0gLTE7CiAgICBsaW5lQnVpbGRlclswXSA9ICdcMCc7CiAgICB3aGlsZSAocCkgewogICAgICAgIGludCBjdXJyZW50UG9zID0gcCAtIGxpbmVQYXJhbTsKICAgICAgICBmb3IgKGludCBrID0gbGluZUxhc3RQb3MgKyAxOyBrIDwgY3VycmVudFBvczsgKytrKSB7CiAgICAgICAgICAgIGxpbmVCdWlsZGVyWysral0gPSBsaW5lUGFyYW1ba107CiAgICAgICAgICAgIGxpbmVMYXN0UG9zID0gayArIDE7CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGsgPSBjdXJyZW50UG9zOyBrIDwgY3VycmVudFBvcyArIGludGVyc3BhY2VzTm87ICsraykgewogICAgICAgICAgICBsaW5lQnVpbGRlclsrK2pdID0gJyonOwogICAgICAgIH0KICAgICAgICBpZiAoc3BhY2VzTGVmdE5vID4gMCkgewogICAgICAgICAgICBsaW5lQnVpbGRlclsrK2pdID0gJyonOwogICAgICAgICAgICAtLXNwYWNlc0xlZnRObzsKICAgICAgICB9CiAgICAgICAgcCA9IHN0cmNocihwICsgMSwgJyonKTsKICAgIH0KICAgIGZvciAoaW50IGsgPSBsaW5lTGFzdFBvcyArIDE7IGsgPD0gbGluZUxlbmd0aFBhcmFtOyArK2spIHsKICAgICAgICBsaW5lQnVpbGRlclsrK2pdID0gbGluZVBhcmFtW2tdOwogICAgfQogICAgc3RyY3B5KGxpbmVQYXJhbSwgbGluZUJ1aWxkZXIpOwogICAgY291dCA8PCBsaW5lUGFyYW07CiAgICBpZiAoaXNXb3JkSW5MaW5lUGFyYW0gPT0gMCkgewogICAgICAgIGlmIChsaW5lTm9QYXJhbSA9PSB2ZXJzTGluZXNOb1BhcmFtKSB7CiAgICAgICAgICAgIGNvdXQgPDwgIlxuIjsKICAgICAgICAgICAgbGluZU5vUGFyYW0gPSAwOwogICAgICAgIH0KICAgICAgICArK2xpbmVOb1BhcmFtOwogICAgICAgIHN0cmNweShsaW5lUGFyYW0sIHdvcmRQYXJhbSk7CiAgICAgICAgbGluZVdvcmRzTm9QYXJhbSA9IDE7CiAgICAgICAgbGluZUxlbmd0aFBhcmFtID0gc3RybGVuKGxpbmVQYXJhbSk7CiAgICAgICAgbGluZUxhc3RQb3MgPSAtMTsKICAgICAgICBjb3V0IDw8ICJcbiI7CiAgICAgICAgaWYgKGlQYXJhbSA9PSB3b3Jkc05vUGFyYW0pIHsKICAgICAgICAgICAgY291dCA8PCBsaW5lUGFyYW07CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIGludCB3b3Jkc05vLCB2ZXJzTGluZXNObywgdmVyc0NvbHVtbnNObzsKICAgIGNpbiA+PiB3b3Jkc05vID4+IHZlcnNMaW5lc05vID4+IHZlcnNDb2x1bW5zTm87CiAgICBjaGFyIHdvcmRbTElORV9DSEFSU19NQVggKyAxXTsKICAgIGNoYXIgbGluZVtMSU5FX0NIQVJTX01BWCArIDFdOwogICAgbGluZVswXSA9ICdcMCc7CiAgICBpbnQgbGluZVdvcmRzTm8gPSAwLCBsaW5lTm8gPSAxOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gd29yZHNObzsgKytpKSB7CiAgICAgICAgY2luID4+IHdvcmQ7CiAgICAgICAgaW50IHdvcmRMZW5ndGggPSBzdHJsZW4od29yZCksIGxpbmVMZW5ndGggPSBzdHJsZW4obGluZSk7CiAgICAgICAgaW50IGlzV29yZEluTGluZSA9IDA7CiAgICAgICAgaWYgKGxpbmVMZW5ndGggKyB3b3JkTGVuZ3RoIDwgdmVyc0NvbHVtbnNObykgewogICAgICAgICAgICB3b3JkSW5MaW5lKGlzV29yZEluTGluZSwgaSwgbGluZSwgd29yZCwgbGluZUxlbmd0aCwgd29yZExlbmd0aCwgCiAgICAgICAgICAgICAgICAgICAgICAgbGluZVdvcmRzTm8pOwogICAgICAgIH0KICAgICAgICBpZiAoaSA9PSB3b3Jkc05vIHx8IChpIDwgd29yZHNObyAmJiBpc1dvcmRJbkxpbmUgPT0gMCkpIHsKICAgICAgICAgICAgbGluZXNGaW5pc2goaXNXb3JkSW5MaW5lLCBpLCBsaW5lLCB3b3JkLCBsaW5lTGVuZ3RoLCBsaW5lV29yZHNObywgCiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNDb2x1bW5zTm8sIGxpbmVObywgdmVyc0xpbmVzTm8sIHdvcmRzTm8pOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9