Task: | Insert Whitespace |
Sender: | Lahna |
Submission time: | 2019-05-27 21:18:31 +0300 |
Language: | C++ |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.02 s | details |
#2 | ACCEPTED | 0.03 s | details |
#3 | ACCEPTED | 0.02 s | details |
#4 | ACCEPTED | 0.02 s | details |
#5 | ACCEPTED | 0.03 s | details |
#6 | ACCEPTED | 0.02 s | details |
#7 | ACCEPTED | 0.02 s | details |
#8 | ACCEPTED | 0.02 s | details |
#9 | ACCEPTED | 0.04 s | details |
#10 | ACCEPTED | 0.04 s | details |
#11 | ACCEPTED | 0.03 s | details |
#12 | ACCEPTED | 0.03 s | details |
#13 | ACCEPTED | 0.03 s | details |
Compiler report
input/code.cpp: In function 'void calc_can(int)': input/code.cpp:49:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (int j=0;j<words[i].size();++j){ ~^~~~~~~~~~~~~~~~ input/code.cpp:58:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (int k=j+1;k<words[i].size();++k){ ~^~~~~~~~~~~~~~~~
Code
#include <bits/stdc++.h> #define F first #define S second using namespace std; int n, h, w, p; string pg[5555]; vector<string> words[5555]; int mnlines[5555]; int mxlines[5555]; int cann[5555]; int canx[5555]; int enx[5555]; int enn[5555]; bool IMPOSSIBLE=0; map<int, int> cand[5555]; void stcan(int j, int l, int e){ if (cand[j].count(l)) return; cand[j][l]=e; } int gtcan(int j, int l){ if (!cand[j].count(l)) cout << "QQQQQ" << endl; return cand[j][l]; } int mncan(int j){ if (!cand[j].size()) return 1222333444; auto w=cand[j].begin(); return w->F; } int mxcan(int j){ if (!cand[j].size()) return -1222333444; auto w=cand[j].end();--w; return w->F; } void calc_can(int i){ for (int j=0;j<5555;++j)cand[j].clear(); stcan(0, 0, 0); for (int j=0;j<words[i].size();++j){ if (!cand[j].size()) continue; int noch=words[i][j].size(); if (noch==w){ for (auto w:cand[j]){ stcan(j+1, w.F+1, j); } } for (int k=j+1;k<words[i].size();++k){ noch+=words[i][k].size()+1; if (noch<=w && w-noch<=k-j){ for (auto w:cand[j]){ stcan(k+1, w.F+1, j); } } if (noch>w) break; } if (noch<=w){ for (auto w:cand[j]){ stcan(words[i].size(), w.F+1, j); } } } } void mkline(int i, int a, int b, vector<string>& lines){ // cout << "mkline " << i << " " << a << " " << b << endl; int noch=-1; for (int j=a;j<b;++j){ noch+=words[i][j].size()+1; } // cout << noch << endl; int dd=w-noch; lines.push_back(words[i][a]); for (int j=a+1;j<b;++j){ if (dd) lines.back().push_back(' '), --dd; lines.back().push_back(' '); lines.back()+=words[i][j]; } // cout << dd << endl; } void get_lines(int i, int nol, vector<string>& lines){ // cout << "get_lines" << i << " " << nol << endl; calc_can(i); int c=words[i].size(); while (c){ int w=gtcan(c, nol); mkline(i, w, c, lines); c=w; --nol; } } int tn[5555]; int tx[5555]; vector<pair<int, int> > possible_mod[5555]; int mod[5555]; void mk_page_breaks(){ possible_mod[0].push_back({0,0}); for (int i=0;i<n;++i){ for (int j=0;j<5555;++j) mod[j]=0; for (int j=mnlines[i];j<=mxlines[i];++j){ for (auto w:possible_mod[i]){ bool br=0; int t=w.F+j; if (t>=h) br=1, t%=h; if (br && (t!=0) && (t<2 || h-w.F<2)) continue; if (mod[t]) continue; mod[t]=1; possible_mod[i+1].push_back({t, j}); } } } } int main(){ cin >> n >> h >> w >> p; string s; getline(cin, s); for (int i=0;i<n;++i){ getline(cin, pg[i]); string t; for (int i=0;i<p;++i)t+=" "; for (auto c:pg[i]){ if (c==' ' || c=='\n'){ words[i].push_back(t); t=""; }else t.push_back(c); } if (t.size()) words[i].push_back(t); calc_can(i); mnlines[i]=mncan(words[i].size()); mxlines[i]=mxcan(words[i].size()); if (mxlines[i]<mnlines[i]) IMPOSSIBLE=1; // cout << "mn " << i << " " << mnlines[i] << endl; // cout << "mx " << i << " " << mxlines[i] << endl; } mk_page_breaks(); if (possible_mod[n].size()==0) { IMPOSSIBLE=1; } if (IMPOSSIBLE) { cout << "IMPOSSIBLE\n"; }else{ int cp=n; int mod=possible_mod[n][0].F; vector<string> lines; while (cp){ for (auto t : possible_mod[cp]){ if (t.F==mod){ get_lines(--cp, t.S, lines); mod-=t.S; mod%=h; if (mod<0) mod+=h; break; } } } int cl=0; for (int i=lines.size()-1;i>=0;--i,++cl){ if (cl==h){ cout << "#\n"; cl=0; } cout << lines[i] << "\n"; } } }
Test details
Test 1
Verdict: ACCEPTED
input |
---|
3 5 10 2 a a a a a a a a a a a a a a a ... |
correct output |
---|
a a a a a a a a a a a a a a a a a a a a ... |
user output |
---|
a a a a a a a a a a a a a a a a a a a a ... Truncated |
Test 2
Verdict: ACCEPTED
input |
---|
3 6 10 2 a a a a a a a a a a a a a a a ... |
correct output |
---|
IMPOSSIBLE |
user output |
---|
IMPOSSIBLE |
Test 3
Verdict: ACCEPTED
input |
---|
3 7 10 2 a a a a a a a a a a a a a a a ... |
correct output |
---|
IMPOSSIBLE |
user output |
---|
IMPOSSIBLE |
Test 4
Verdict: ACCEPTED
input |
---|
3 8 10 2 a a a a a a a a a a a a a a a ... |
correct output |
---|
a a a a a a a a a a a a a a a a a a a a ... |
user output |
---|
a a a a a a a a a a a a a a a a a a a a ... Truncated |
Test 5
Verdict: ACCEPTED
input |
---|
5 10 80 4 Lorem ipsum dolor sit amet, co... |
correct output |
---|
Lorem ipsum dolor sit amet... |
user output |
---|
Lorem ipsum dolor sit amet... Truncated |
Test 6
Verdict: ACCEPTED
input |
---|
5 10 70 4 Lorem ipsum dolor sit amet, co... |
correct output |
---|
Lorem ipsum dolor sit amet... |
user output |
---|
Lorem ipsum dolor sit ... Truncated |
Test 7
Verdict: ACCEPTED
input |
---|
5 10 60 4 Lorem ipsum dolor sit amet, co... |
correct output |
---|
IMPOSSIBLE |
user output |
---|
IMPOSSIBLE |
Test 8
Verdict: ACCEPTED
input |
---|
55 20 80 4 Lorem ipsum dolor sit amet, co... |
correct output |
---|
Lorem ipsum dolor sit ame... |
user output |
---|
Lorem ipsum dolor sit ... Truncated |
Test 9
Verdict: ACCEPTED
input |
---|
55 20 80 6 Lorem ipsum dolor sit amet, co... |
correct output |
---|
Lorem ipsum dolor sit... |
user output |
---|
Lorem ipsum dolor sit... Truncated |
Test 10
Verdict: ACCEPTED
input |
---|
55 20 80 8 Lorem ipsum dolor sit amet, co... |
correct output |
---|
IMPOSSIBLE |
user output |
---|
IMPOSSIBLE |
Test 11
Verdict: ACCEPTED
input |
---|
3 43 37 34 aaa aaaaa aaaa a aa aa aa aaa ... |
correct output |
---|
... |
user output |
---|
... Truncated |
Test 12
Verdict: ACCEPTED
input |
---|
4 50 73 12 aaaaa aa a aaa a aaa aaaa aaaa... |
correct output |
---|
aaaaa aa a aaa ... |
user output |
---|
aaaaa aa a aaa ... Truncated |
Test 13
Verdict: ACCEPTED
input |
---|
4 6 62 31 aa aaa aaa aa aaaaa aaa aaaaa ... |
correct output |
---|
... |
user output |
---|
... Truncated |