| Task: | Insert Whitespace |
| Sender: | Game of Nolife |
| Submission time: | 2019-05-25 13:36:21 +0300 |
| Language: | C++ |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.02 s | details |
| #2 | ACCEPTED | 0.01 s | details |
| #3 | ACCEPTED | 0.03 s | details |
| #4 | ACCEPTED | 0.02 s | details |
| #5 | ACCEPTED | 0.03 s | details |
| #6 | ACCEPTED | 0.02 s | details |
| #7 | ACCEPTED | 0.03 s | details |
| #8 | ACCEPTED | 0.11 s | details |
| #9 | ACCEPTED | 0.11 s | details |
| #10 | ACCEPTED | 0.09 s | details |
| #11 | ACCEPTED | 0.04 s | details |
| #12 | ACCEPTED | 0.03 s | details |
| #13 | ACCEPTED | 0.02 s | details |
Code
#include <bits/stdc++.h>
#define F first
#define S second
#define X real()
#define Y imag()
using namespace std;
typedef long long ll;
typedef long double ld;
pair<int, int> dp[5005][52][82];
int n,h,w,p;
int tw=0;
string www[5005];
int par[5005];
string spas(int x){
string r;
for (int i=0;i<x;i++){
r+=' ';
}
return r;
}
pair<pair<int, int>, string> ns(int i, int l, int ch, int sp){
if (i==tw-1){ // kaikki loppu
if (l==0) return {{-1, -1}, ""};
if (ch+(int)www[i].size()<=w){
return {{l, ch+(int)www[i].size()}, www[i]};
} else {
return {{-1, -1}, ""};
}
} else if (par[i] != par[i+1]) { // paragraph loppu
if (l==0) return {{-1, -1}, ""};
if (l==h-2) return {{-1, -1}, ""};
if (ch+(int)www[i].size()<=w){
if (l==h-1){
return {{0, p}, www[i]+"\n#\n"+spas(p)};
} else{
return {{l+1, p}, www[i]+"\n"+spas(p)};
}
}
} else if (ch+(int)www[i].size()==w){ // rivi loppu
if (l==h-1){
return {{0, 0}, www[i]+"\n#\n"};
} else {
return {{l+1, 0}, www[i]+"\n"};
}
} else if (ch+sp+(int)www[i].size()<w) { // rivi ei lopu
return {{l, ch+sp+(int)www[i].size()}, www[i]+spas(sp)};
} else {
return {{-1, -1}, ""};
}
return {{-1, -1}, ""};
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin>>n>>h>>w>>p;
string temp;
getline(cin, temp);
for (int i=0;i<n;i++){
getline(cin, temp);
stringstream ss;
ss<<temp;
while (ss>>temp){
par[tw]=i;
www[tw++]=temp;
}
}
for (int i=0;i<=tw;i++){
for (int j=0;j<=h;j++){
for (int k=0;k<=w;k++){
dp[i][j][k]={-1, -1};
}
}
}
const pair<int, int> fail={-1, -1};
dp[0][0][p]={0, 0};
for (int i=0;i<tw;i++){
for (int j=0;j<h;j++){
for (int x=0;x<=w;x++){
if (dp[i][j][x]==fail) continue;
for (int a=1;a<=2;a++){
auto ne=ns(i, j, x, a);
if (ne.F==fail) continue;
dp[i+1][ne.F.F][ne.F.S]={j, x};
}
}
}
}
pair<int, int> rec=fail;
for (int j=0;j<h;j++){
for (int x=0;x<=w;x++){
if (dp[tw][j][x]!=fail) {
rec={j, x};
}
}
}
if (rec==fail){
cout<<"IMPOSSIBLE";
return 0;
}
vector<string> ans;
for (int i=tw;i>0;i--){
auto from=dp[i][rec.F][rec.S];
int f=0;
for (int a=1;a<=2;a++){
auto lol=ns(i-1, from.F, from.S, a);
if (lol.F==rec){
ans.push_back(lol.S);
rec=from;
f=1;
break;
}
}
assert(f);
}
cout<<spas(p);
for (int i=(int)ans.size()-1;i>=0;i--){
cout<<ans[i];
}
}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 |
