CF58D Calendar 题解

CF58D Calendar 题解

题目描述

CF58D Calendar

题目解法

暴力题。

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

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

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

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

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

由于 1n104,不需要使用二分,暴力枚举就能通过本题。

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

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();
}

本文作者:Jimmy-LEEE

本文链接:https://www.cnblogs.com/redacted-area/p/18379523

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Jimmy-LEEE  阅读(4)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起