这题难点在这句话:n1 = n3 = max { k| k <= n2 for all 3 <= n2 <= N }
理解为n2在3到N之间,k的值小于等于n2,等号最右边的值是k,那么n1=n3都等于k,也就都小于等于n2。
理解了这句话,这题就是送,画个图列出表达式就可以秒了。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;
int main(){
// freopen("in.txt", "r", stdin);
string str;
while(cin >> str){
int N = str.size();
int i = 0;
while(3*i+1 <= N) i++;
i--;
int n2 = N-2*i;
for(int j = 0; j < i; j++){
printf("%c", str[j]);
for(int k = 0; k < n2-2; k++) printf(" ");
printf("%c\n", str[N-j-1]);
}
for(int k = i; k < N-i; k++) printf("%c", str[k]);
printf("\n");
}
return 0;
}
这