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

How does this code works in c++?

本文关键字:何工作 工作 代码 c++      更新时间:2023-10-16

我昨天参加了Codeforces第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()));

能解决这个"高级"任务吗?

如果两个字符串相等,则不存在"不常见子序列"。如果它们不相等,那么这两个都不是另一个的子序列,但每一个都是自己的一个子序列,因此每一个是"不寻常子序列"。两者中较长的一个是最长的"不寻常子序列",其长度是正确答案。如果二者不相等但长度相同,则每一个都是"不寻常子序列",最长的子序列的长度就是其中一个的长度。

不要纠结于你(或任何其他理智的人)认为的"子序列"是什么。这个问题定义了"不常见的子序列",你所要做的就是应用它的定义。这个"问题"是关于文字游戏,而不是编码。

它似乎并不能解决手头的任务。当字符串相等时,它只输出-1,当字符串不不同时,它输出较长字符串的长度。然而,这个问题需要最长的不常见序列。它将在输入abcabcd的情况下失败以给出答案1宁愿给出4

该线路的作用如下:

  • 它检查a == b,字符串是否相等
  • 如果它们相等,则三元运算符A ? B : C中的条件A为真,因此表达式将计算为B,在这里仅为-1
  • 若它们不相等,它将计算为C,这是两个字符串长度中的最大值,所以它将是较长字符串的长度
  • 然后打印三元表达式的值,尽管没有换行符,这有点糟糕

所以代码很短,因为它只解决了少数情况下的问题,而不是一般情况下的。

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的回答)