这段代码在c ++中是如何工作的?

时间:2017-02-08 17:28:31

标签: c++ string

我昨天参加了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;任务?

3 个答案:

答案 0 :(得分:3)

如果两个字符串相等,则没有“不常见的子序列”。如果它们不相等,那么一个都不是另一个的后续序列,但每个都是它自己的子序列,所以每个都是“不常见的子序列”。两者中较长的是最长的“不常见的子序列”,其长度是正确的答案。如果两者不相等但长度相同,那么每一个都是“不常见的子序列”,最长的长度就是任何一个的长度。

不要纠结你(或任何其他合理的人)认为“后续”的内容。该问题定义了“不常见的子序列”,您所要做的就是应用它的定义。这个“问题”是关于文字游戏,而不是编码。

答案 1 :(得分:0)

似乎没有解决手头的任务。它只是在字符串相等时输出-1,在它们没有不同时输出较长字符串的长度。但是,问题要求最长的不常见序列。输入abcabcd会导致答案为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的回答)