Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)B. Personalized Cup

题意:把一长串字符串 排成矩形形式  使得行最小  同时每行不能相差大于等于两个字符 每行也不能大于20个字符

思路: 因为使得行最小 直接行从小到大枚举即可   每行不能相差大于等于两个字符相当于  从上往下一列一列填

然后直接模拟即可

 1 #include<bits/stdc++.h>
 2 #define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++)
 3 #define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr)) 
 4 #define F first 
 5 #define S second
 6 #define pii pair<int ,int >
 7 #define mkp make_pair
 8 #define pb push_back
 9 #define arr(zzz) array<ll,zzz>
10 #define ll long long 
11 using namespace std;
12 const int maxn=1e6+100;
13 char s[maxn];
14 int main(){
15     cin>>s+1;
16     int n=strlen(s+1);
17     for(int i=1;i<=100;i++){
18         int tmp=ceil(1.0*n/i);
19         if(tmp<=20){
20             
21             int flag=i-n%i;
22             int p=1;
23             if(flag==i)flag=0;
24             cout<<i<<" "<<tmp<<endl;
25             for(int k=0;k<i;i++){
26                 for(int j=0;j<tmp;j++){
27                     if(flag&&j==tmp-1){
28                         flag--;
29                         cout<<"*";
30                     }
31                     else cout<<s[p++];
32                     if(p>n)return 0;
33                 }
34                 cout<<endl;
35                 if(p>n)return 0;;
36             }
37 
38         }
39     
40     }
41     return 0;
42 }
View Code
原文地址:https://www.cnblogs.com/ttttttttrx/p/10790984.html