Cod sursa(job #691769)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 26 februarie 2012 12:52:08
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.67 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<string.h>
using namespace std;

ifstream in("paginatie.in");
ofstream out("paginatie.out");

struct el {
	int nrc,lu;
};

int x,y,t1,t2,t3,nrc,nrl,ifspace;
vector<el> nrr;
char a[1001],b[1001];

int main() {
	int tm,i,j,k;
	el t;
	
	in >> x >> y;
	
	in.getline(a,1001);
	
	while(!in.eof()) {
		in.getline(a,1001);
		
		if(in.eof())
			break;
		
		++nrc;
		
		t2=strlen(a);
		
		if(t1+t2 + t3 + ifspace>y) {
			
			++nrl;
			b[0]=0;
			ifspace=0;
			--nrc;
			t.nrc=nrc; t.lu=t1+ t3;
			nrr.push_back(t);
			t1=0;
			nrc=1;
		}
		else
		if(t1+t2 + t3 + ifspace+1==y) {
			
			t.nrc=nrc; t.lu=t1+t2+t3;
			nrr.push_back(t);
			++nrl;
			b[0]=0;
			ifspace=0;
			t1=0;
			nrc=1;
			continue;
		}
		
		if(b[0]!=0) {
			if(ifspace)
				++t1;
			ifspace=1;
		}
		t1+=strlen(b);
		
		strcpy(b,a);
		t3=t2;
	}
	
	if(b[0]!='0') {
		t.nrc=nrc; t.lu=t1;
		nrr.push_back(t);
	}
	
	in.close();
	
	ifstream inn("paginatie.in");
	inn >> x >> y;
	inn.getline(a,1001);
	
	for(i=0;i!=nrr.size();++i) {
		if(nrr[i].nrc==1) {
			inn.getline(a,1001);
			out << a << "\n";
			if((i+1)%x==0)
				out << "\n";
			continue;
		}
		if((i+1)%x==0)
			out << "\n";
		
		t1=(y-nrr[i].lu)/(nrr[i].nrc-1);
		t2=y-nrr[i].lu - t1*(nrr[i].nrc-1);
		
		inn.getline(a,1001);
		out << a;
		
		for(j=1;j<=t2;++j) {
			inn.getline(a,1001);
			
			for(k=1;k<=t1;++k)
				out << " ";
			
			out << " " << a;	
		}
		for(j=t2+1;j<=nrr[i].nrc-1;++j) {
			inn.getline(a,1001);
			
			for(k=1;k<=t1;++k)
				out << " ";
			
			out << a;
		}
		out << "\n";
		
	}
	
	return 0;
}