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 }