1115-Multi-column List

大学入学してからAOJを解く速度が鈍化してる…
考え方
昨日のBottomCoderのMediumみたいな実装問題。

実装(C++)

#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <climits>
#include <cctype>
#include <ctime>
#include <cassert>
#include <cwchar>
#include <cstdarg>
#include <cwctype>
#include <queue>
#include <stack>
#include <algorithm>
#include <list>
#include <vector>
#include <set>
#include <map>
#include <iostream>
#include <deque>
#include <complex>
#include <string>
#include <functional>
#include <iomanip>
#include <sstream>

#include <tr1/unordered_map>
#include <boost/foreach.hpp>
#include <boost/lexical_cast.hpp>
#define foreach BOOST_FOREACH

using namespace std;
using namespace tr1;
using namespace boost;


typedef long long int lli;
int plen,cnum,width,cspace;
string String(int Number,string Character){
	string ret="";
	for(int i=0;i<Number;i++)ret+=Character;
	return ret;
}

int main() {
	for(;;){
		string t;
		getline(cin,t);
		plen=boost::lexical_cast<int>(t);
		if(!plen)break;
		getline(cin,t);
		cnum=boost::lexical_cast<int>(t);
		getline(cin,t);
		width=boost::lexical_cast<int>(t);
		getline(cin,t);
		cspace=boost::lexical_cast<int>(t);
		deque<string> in;
		while(1){
			getline(cin,t);
			if(t=="?")break;
			in.push_back(t);
		}
		deque<string> str;
		foreach(string t,in){
			for(int i=0;i<(int)t.size();i+=width){
				str.push_back(t.substr(i,min(width,(int)t.size()-i)));
			}
			if(t=="")str.push_back("");
		}
		for(;;){
			if((str.size()%(plen*cnum))==0)break;
			str.push_back("");
		}
		for(int i=0;i<(int)str.size();i++){
			str[i]+=String(width-str[i].size(),".");
		}
		vector<string> p(plen);

		while(!str.empty()){
			for(int i=0;i<plen;i++){
				p[i]="";
			}
			for(int i=0;i<cnum;i++){
				for(int j=0;j<plen;j++){
					if(i)p[j]+=String(cspace,".");
					p[j]+=str.front();
					str.pop_front();
				}
			}
			for(int i=0;i<plen;i++){
				cout<<p[i]<<endl;
			}
			cout<<"#"<<endl;
		}
		cout<<"?"<<endl;
	}
	return 0;
}