CF58D Calendar 题解
CF58D Calendar 题解
看题目点这里。
具体思路:
我们知道输出的每一行由两个串加一个分隔符组成,所以我们不妨假设这一个分隔符原本就处于字符串内(方便排序),然后组成了新字符串之后在去掉末尾的字符。
做题步骤:
-
输入; -
将分隔符加入每一个字符串内;
-
按字典序排序(tips:
sort(str+1,str+n+1)即可); -
求答案;
-
输出。
核心代码:
for (int x = 1; x <= n; x++)
s[x] += ch, m += s[x].size();
m /= n / 2; //m为一个输出串的长度(末尾有分隔符)
for (int x = 1; x <= n; x++)
for (int y = x + 1; y <= n; y++)
if (s[x].size() + s[y].size() == m)
{
s[y][s[y].size() - 1] = ' ';//去分隔符(由于文本比对忽略行末空格,所以可以将最后一位改为空格)
ans[cnt++] = s[x] + s[y];
s[x] = "", s[y] = "";
break;
}
温馨提示:
需要将变量定义为 string 类型。

浙公网安备 33010602011771号