我昨天参加了Codeforces Round#396(Div.2)。 当我读到它时,(A)问题在我看来似乎很先进。 我试图在昨天和今天的某个时间解决它。 我提出了一个200线长(半工作)的解决方案。然后我放弃了。
我看了其他人在那里写的内容,我看到最多20行代码对我来说似乎很神奇。
问题要求您输出两个字符串中字母最长的不常见子序列的长度。 你可以在这里阅读完整的问题: http://codeforces.com/contest/766/problem/A
#include<bits/stdc++.h>
using namespace std;
string a,b;
int main(){
cin>>a>>b;
printf("%d",a==b?-1:max(a.size(),b.size()));
return 0;
}
这是用于解决问题的所有代码,我真的想知道那一行代码是什么
printf("%d",a==b?-1:max(a.size(),b.size()));
可以解决这个问题&#34;高级&#34;任务?
答案 0 :(得分:3)
如果两个字符串相等,则没有“不常见的子序列”。如果它们不相等,那么一个都不是另一个的后续序列,但每个都是它自己的子序列,所以每个都是“不常见的子序列”。两者中较长的是最长的“不常见的子序列”,其长度是正确的答案。如果两者不相等但长度相同,那么每一个都是“不常见的子序列”,最长的长度就是任何一个的长度。
不要纠结你(或任何其他合理的人)认为“后续”的内容。该问题定义了“不常见的子序列”,您所要做的就是应用它的定义。这个“问题”是关于文字游戏,而不是编码。
答案 1 :(得分:0)
似乎没有解决手头的任务。它只是在字符串相等时输出-1
,在它们没有不同时输出较长字符串的长度。但是,问题要求最长的不常见序列。输入abc
和abcd
会导致答案为1
而不是4
。
该行的作用如下:
a == b
是否相等。A
中的条件A ? B : C
为真,因此该表达式将计算为B
,它只是-1
1}}这里。C
这是两个字符串长度中的最大值,因此它将是较长字符串的长度。所以代码很短,因为它只解决了少数情况下的问题,但不是一般情况。
答案 2 :(得分:-1)
printf ("%d", a == b ? -1 : max (a.size (), b.size ()));
相当于
if (a == b) {
printf ("%d", -1);
}
else {
if (a.size () > b.size ()) {
printf ("%d", a.size ());
}
else {
printf ("%d", b.size());
}
}
BTW这只是解决问题的一小步......
[校正]
它解决了整个问题(参见Pete Becker的回答)