Cod sursa(job #2634508)

Utilizator mex7Alexandru Valentin mex7 Data 11 iulie 2020 11:52:47
Problema Deque Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.96 kb
#include <bits/stdc++.h>
#define ll long long
#define MAXX 20001
using namespace std;
 
ifstream fin("text4.in");
ofstream fout("text4.out");
vector <string> paragraph[3000];
 
void divideIntoWords(string s, int index) {
    int start = -1;
    for (int i = 0; i <= s.size(); i++)
        if (start < 0 && s[i] != ' ')
            start = i;
        else if (start >= 0 && (s[i] == ' ' || i == s.size())) {
            paragraph[index].push_back(s.substr(start, i - start));
            start = -1;
        }
}
 
int main() {
    int lineSize;
    string s;
    int size = 0;
 
    fin >> lineSize; fin.get();
    while (getline(fin, s)) 
        divideIntoWords(s, ++size);
    
    for (int i = 1; i <= size; i++) {
        int startPosition = 0, currentLength = paragraph[i][0].size();
        for (int j = 1; j < paragraph[i].size(); j++)
            if ((currentLength + paragraph[i][j].size() + (j - startPosition)) <= lineSize)
                currentLength += paragraph[i][j].size();
            else {
                int numOfparagraph = j - 1 - startPosition;
                int numOfSpace = (lineSize - currentLength) / numOfparagraph;
                int rem = (lineSize - currentLength) % numOfparagraph;
 
                for (int k = startPosition; k < j; k++) {
                    fout << paragraph[i][k];
 
                    if (k < j - 1) {
                        for (int k = 1; k <= numOfSpace; k++)
                            fout << ' ';
                        if (rem > 0) {
                            fout << ' ';
                            rem--;
                        }
                    }
                }
                fout << '\n';
 
                startPosition = j;
                currentLength = paragraph[i][j].size();
            }
 
        for (int j = startPosition; j < paragraph[i].size(); j++)
            fout << paragraph[i][j]<< " ";
        fout << "\n";
    }
 
    return 0;
}