本题题意
给一个字符串,将其分成等长度的字符串,但是分的行数不能超过 \(5\) 行,每行的长度不得超过 \(20\)。如果无法等分的,则用 *
来补足长度。输出在行数最小的前提下,列数最少的一种方案。
思路
由于字符串范围最多也就 \(20\times5\),直接分类讨论即可。
AC code
#include<bits/stdc++.h>
using namespace std;
string s;
void q(int l,int len){ //输出行和每段长度
cout<<l<<" ";
int h=len/l;
if(len%l>0) h++;//注意:如果len不整除l,则要+1
cout<<h<<endl;
}
void out(int a,int b){//输出s的a到b项
a--;
b--;
//由于字符串存储是从0开始的,a和b要往前一位
for(int i=a;i<=b;i++){
cout<<s[i];
}
cout<<endl;
}
void out_2(int a,int b){//输出有星号的
cout<<"*";
out(a,b);
}
int main(){
cin>>s;
int len=s.size();
if(len<=20){//输出一行的情况
q(1,len);
out(1,len);
}else if(len<=40){//输出两行的情况
q(2,len);
if(len%2==0){
out(1,len/2);
out(len/2+1,len);
}
else{
out_2(1,len/2);
out(len/2+1,len);
}
}else if(len<=60){//输出三行的情况
q(3,len);
if(len%3==0){
out(1,len/3);
out(len/3+1,len/3*2);
out(len/3*2+1,len);
}else if(len%3==1){
out_2(1,len/3);
out_2(len/3+1,len/3*2);
out(len/3*2+1,len);
}else{
out_2(1,len/3);
out(len/3+1,len/3*2+1);
out(len/3*2+2,len);
}
}else if(len<=80){//输出四行的情况
q(4,len);
if(len%4==0){
out(1,len/4);
out(len/4+1,len/2);
out(len/2+1,len/4*3);
out(len/4*3+1,len);
}else if(len%4==1){
out_2(1,len/4);
out_2(len/4+1,len/2);
out_2(len/2+1,len/4*3);
out(len/4*3+1,len);
}else if(len%4==2){
out_2(1,len/4);
out_2(len/4+1,len/2-1);
out(len/2,len/4*3+1);
out(len/4*3+2,len);
}else{
out_2(1,len/4);
out(len/4+1,len/2);
out(len/2+1,len/4*3+2);
out(len/4*3+3,len);
}
}else if(len<=100){//输出五行的情况
q(5,len);
if(len%5==0){
out(1,len/5);
out(len/5+1,len/5*2);
out(len/5*2+1,len/5*3);
out(len/5*3+1,len/5*4);
out(len/5*4+1,len);
}else if(len%5==1){
out_2(1,len/5);
out_2(len/5+1,len/5*2);
out_2(len/5*2+1,len/5*3);
out_2(len/5*3+1,len/5*4);
out(len/5*4+1,len);
}else if(len%5==2){
out_2(1,len/5);
out_2(len/5+1,len/5*2);
out_2(len/5*2+1,len/5*3);
out(len/5*3+1,len/5*4+1);
out(len/5*4+2,len);
}else if(len%5==3){
out_2(1,len/5);
out_2(len/5+1,len/5*2);
out(len/5*2+1,len/5*3+1);
out(len/5*3+2,len/5*4+2);
out(len/5*4+3,len);
}else{
out_2(1,len/5);
out(len/5+1,len/5*2+1);
out(len/5*2+2,len/5*3+2);
out(len/5*3+3,len/5*4+3);
out(len/5*4+4,len);
}
}
//最后说一句:一定要亲自测一遍!不然最后输出可能会存在问题!
//又臭又长(((
return 0;
}
标签:Cup,CF1032B,题解,len,int,字符串,Personalized
From: https://www.cnblogs.com/bubble-sort/p/18369932