W
e
l
c
o
m
e
: )

CF58D Calendar 题解

CF58D Calendar 题解

题目描述

CF58D Calendar

题目解法

暴力题。

我们发现输出的字符串中除了每一行最后一个串没有分割字符,其余的都有。

并且每一行只会有两个字符串。

我们可以在每个输入的字符串后面加上分割字符后再进行排序,这样可以保证字典序最小。

每次枚举一个字符串,找到第一个可以和他组成符合条件的字符串,然后将他们输出。

C++ 的 string 是基于 vector 的,加上分割字符的操作可以 push_back(),输出时将第二个字符串 pop_back() 即可。

由于 \(1\leq n\leq 10^4\),不需要使用二分,暴力枚举就能通过本题。

记得将使用过的字符串清空。

Code

#include<bits/stdc++.h>
using namespace std;
#define maxn 10004

string m[maxn];

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    char c;
    int n,s=0;
    cin>>n;
    for(int i=1;i<=n;i++) 
        cin>>m[i];
    cin>>c;
    for(int i=1;i<=n;i++) 
        m[i].push_back(c), s+=m[i].size();
    int lrc=s*2/n;
    sort(m+1, m+n+1);
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++)
            if(m[i].size()+m[j].size()==lrc)
                cout<<m[i],
                m[j].pop_back(),
                cout<<m[j]<<'\n',
                m[i].clear(), m[j].clear();
}
posted @ 2024-08-25 20:55  Jimmy-LEEE  阅读(6)  评论(0)    收藏  举报