这些代码在c++中是如何工作的
How does this code works in c++?
我昨天参加了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
,当字符串不不同时,它输出较长字符串的长度。然而,这个问题需要最长的不常见序列。它将在输入abc
和abcd
的情况下失败以给出答案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的回答)
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?