Cod sursa(job #2634475)

Utilizator mex7Alexandru Valentin mex7 Data 11 iulie 2020 08:54:02
Problema Deque Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.41 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;
 
ifstream fin("text4.in");
ofstream fout("text4.out");
vector <string> paragraph[2000];

void addWord(int start, int end, string s, int index) {
    string newS;
    for (int i = start; i < end; i++) 
        newS += s[i];
    
    paragraph[index].push_back(newS);
}
 
void divideIntoWords(string s, int index) {
    int start = -1;
    for (int i = 0; i <= (int) s.size(); i++)
        if (start < 0 && isalpha(s[i]))
            start = i;
        else if (start >= 0 && (s[i] == ' ' || i == (int) s.size())) {
            addWord(start, i, s, index);
            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 < (int) paragraph[i].size(); j++)
            if ((currentLength + (int) paragraph[i][j].size() + (j - startPosition)) <= lineSize)
                currentLength += (int) paragraph[i][j].size();
            else {
            /*    if (j - 1 - startPosition == 0) {
                    fout << paragraph[i][startPosition] << "\n";
                    startPosition = j;
                    currentLength = (int) paragraph[i][j].size();
                    continue;
                }*/
 
                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 = (int) paragraph[i][j].size();
            }
 
        for (int j = startPosition; j < (int) paragraph[i].size(); j++)
            fout << paragraph[i][j] << " ";
        fout << "\n";
    }
 
    return 0;
}