Codeforces Round #104 (Div. 2)
Codeforces Round #104 (Div. 2) Editorial
比赛时做出三题
A略 B忘了题意,也略吧…
C Lucky Conversion 只需记录两字符串相应位置分别出现47和74的次数,输出这两个数的最大值
D Lucky Number 2 这个看了题解 想象删除所有相邻重复数字,可以得到形如47474747474747的串,所以 a3 与 a4 的差的绝对值一定小于等于1。然后分三种情况讨论:
-
a3 = a4,若 a1 = a3,则说明4不够多,生成的串以7开头,如74747,多余的7插入到最右面,多余的4放在最左边的4。。否则形如47474,多余的7插入到最右面的7,多余的4放在最左边。
-
a3 > a4,形如47474747,多余的4放在最前面,7放在最后面
-
a3 < a4,形如74747474,多余的4插入到1位置,7插入到最后面的7
#include
#include
#include
#include
using namespace std;
int main()
{
int a1, a2, a3, a4;
cin >> a1 >> a2 >> a3 >> a4;
if (abs(a3 - a4) > 1)
{
puts("-1");
return 0;
}
string str;
if (a3 == a4)
{
if ((a1 == a3 && a2 == a3) ||
a1 < a3 || a2 < a3)
{
puts("-1");
return 0;
}
// '4' is not enough
if (a1 == a3)
{
for (int i = 0; i < a3; i++) str += "74";
str += "7";
if (a2 > a3 + 1)
{
string temp(a2 - a3 - 1, '7');
str.append(temp);
}
}
else // '4' is enough
{
for (int i = 0; i < a3; i++) str += "47";
str += "4";
if (a1 > a3 + 1)
{
/*
string ( size_t n, char c );
Content is initialized as a string formed
by a repetition of character c, n times.
*/
string temp(a1 - a3 - 1, '4');
str.insert(0, temp);
}
if (a2 > a3)
{
string temp(a2 - a3, '7');
str.insert(str.find_last_of('7'), temp);
}
}
}
else if (a3 < a4)
{
for (int i = 0; i < a4; i++) str += "74";
if (a1 < a4 || a2 < a4)
{
puts("-1");
return 0;
}
if (a1 > a4)
{
string temp(a1 - a4, '4');
str.insert(1, temp);
}
if (a2 > a4)
{
string temp(a2 - a4, '7');
str.insert(str.find_last_of('7'), temp);
}
}
else // a3 > a4
{
for (int i = 0; i < a3; i++) str += "47";
if (a1 < a3 || a2 < a3)
{
puts("-1");
return 0;
}
if (a1 > a3)
{
string temp(a1 - a3, '4');
str.insert(0, temp);
}
if (a2 > a3)
{
string temp(a2 - a3, '7');
str.insert(str.find_last_of('7'), temp);
}
}
cout << str << endl;
return 0;
}
comments powered by Disqus