fork download
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. const int LINE_CHARS_MAX = 20;
  6.  
  7. void wordInLine(int &isWordInLineParam, int iParam,
  8. char lineParam[LINE_CHARS_MAX + 1],
  9. char wordParam[LINE_CHARS_MAX + 1], int &lineLengthParam,
  10. int wordLengthParam, int &lineWordsNoParam) {
  11. isWordInLineParam = 1;
  12. if (iParam == 1) {
  13. strcat(lineParam, wordParam);
  14. } else {
  15. strcat(lineParam,"*");
  16. ++lineLengthParam;
  17. strcat(lineParam, wordParam);
  18. }
  19. lineLengthParam += wordLengthParam;
  20. ++lineWordsNoParam;
  21. }
  22.  
  23. void wordBuild(int &lineLastPosParam, int currentPosParam,
  24. char lineBuilderParam[LINE_CHARS_MAX + 1], int &jParam,
  25. char lineParam1[LINE_CHARS_MAX + 1]) {
  26. for (int k = lineLastPosParam + 1; k < currentPosParam; ++k) {
  27. lineBuilderParam[++jParam] = lineParam1[k];
  28. lineLastPosParam = k + 1;
  29. }
  30. }
  31.  
  32. void spacesLeftBuild(int currentPosParam, int interspacesNoParam,
  33. char lineBuilderParam[LINE_CHARS_MAX + 1],
  34. int &jParam, int &spacesLeftNoParam) {
  35. for (int k = currentPosParam; k < currentPosParam + interspacesNoParam; ++k) {
  36. lineBuilderParam[++jParam] = '*';
  37. }
  38. if (spacesLeftNoParam > 0) {
  39. lineBuilderParam[++jParam] = '*';
  40. --spacesLeftNoParam;
  41. }
  42. }
  43.  
  44. void lastWordBuild(int lineLastPosParam, int lineLengthParam1,
  45. char lineBuilderParam[LINE_CHARS_MAX + 1], int &jParam,
  46. char lineParam1[LINE_CHARS_MAX + 1]) {
  47. for (int k = lineLastPosParam + 1; k <= lineLengthParam1; ++k) {
  48. lineBuilderParam[++jParam] = lineParam1[k];
  49. }
  50. }
  51.  
  52. void ShowCompletedLine(char lineParam1[LINE_CHARS_MAX + 1],
  53. char lineBuilderParam[LINE_CHARS_MAX + 1]) {
  54. strcpy(lineParam1, lineBuilderParam);
  55. cout << lineParam1;
  56. }
  57.  
  58. void firstWordInANewLine(int &isWordInLineParam1, int &lineNoParam1,
  59. int &versLinesNoParam1,
  60. char lineParam1[LINE_CHARS_MAX + 1],
  61. char wordParam1[LINE_CHARS_MAX + 1],
  62. int &lineWordsNoParam1, int &lineLengthParam1,
  63. int &lineLastPosParam, int &iParam1,
  64. int &wordsNoParam1) {
  65. if (isWordInLineParam1 == 0) {
  66. if (lineNoParam1 == versLinesNoParam1) {
  67. cout << "\n";
  68. lineNoParam1 = 0;
  69. }
  70. ++lineNoParam1;
  71. strcpy(lineParam1, wordParam1);
  72. lineWordsNoParam1 = 1;
  73. lineLengthParam1 = strlen(lineParam1);
  74. lineLastPosParam = -1;
  75. cout << "\n";
  76. if (iParam1 == wordsNoParam1) {
  77. cout << lineParam1;
  78. }
  79. }
  80. }
  81.  
  82. void linesFinish(int &isWordInLineParam, int &iParam,
  83. char lineParam[LINE_CHARS_MAX + 1],
  84. char wordParam[LINE_CHARS_MAX + 1], int &lineLengthParam,
  85. int &lineWordsNoParam, int &versColumnsNoParam,
  86. int &lineNoParam, int &versLinesNoParam, int &wordsNoParam) {
  87. int interspacesNo = 0, spacesLeftNo = 0;
  88. if (lineWordsNoParam > 1) {
  89. interspacesNo = (versColumnsNoParam - lineLengthParam +
  90. lineWordsNoParam - 1) / (lineWordsNoParam - 1);
  91. spacesLeftNo = (versColumnsNoParam - lineLengthParam +
  92. lineWordsNoParam - 1) % (lineWordsNoParam - 1);
  93. }
  94. char *p = strchr(lineParam, '*') , lineBuilder[LINE_CHARS_MAX + 1];
  95. int lineLastPos = -1, j = -1;
  96. lineBuilder[0] = '\0';
  97. while (p) {
  98. int currentPos = p - lineParam;
  99. wordBuild(lineLastPos, currentPos, lineBuilder, j, lineParam);
  100. spacesLeftBuild(currentPos, interspacesNo, lineBuilder, j,
  101. spacesLeftNo);
  102. p = strchr(p + 1, '*');
  103. }
  104. lastWordBuild(lineLastPos, lineLengthParam, lineBuilder, j, lineParam);
  105. ShowCompletedLine(lineParam, lineBuilder);
  106. firstWordInANewLine(isWordInLineParam, lineNoParam, versLinesNoParam,
  107. lineParam, wordParam, lineWordsNoParam, lineLengthParam,
  108. lineLastPos, iParam, wordsNoParam);
  109. }
  110.  
  111. int main() {
  112. int wordsNo, versLinesNo, versColumnsNo;
  113. cin >> wordsNo >> versLinesNo >> versColumnsNo;
  114. char word[LINE_CHARS_MAX + 1];
  115. char line[LINE_CHARS_MAX + 1];
  116. line[0] = '\0';
  117. int lineWordsNo = 0, lineNo = 1;
  118. for (int i = 1; i <= wordsNo; ++i) {
  119. cin >> word;
  120. int wordLength = strlen(word), lineLength = strlen(line);
  121. int isWordInLine = 0;
  122. if (lineLength + wordLength < versColumnsNo) {
  123. wordInLine(isWordInLine, i, line, word, lineLength, wordLength,
  124. lineWordsNo);
  125. }
  126. if (i == wordsNo || (i < wordsNo && isWordInLine == 0)) {
  127. linesFinish(isWordInLine, i, line, word, lineLength, lineWordsNo,
  128. versColumnsNo, lineNo, versLinesNo, wordsNo);
  129. }
  130. }
  131. return 0;
  132. }
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
Standard output is empty