钾肥喵的窝

我在 CODING 部署的 Hexo 博客

0%

题解 【P1781】 宇宙总统

题面

https://www.luogu.com.cn/problem/P1781

基本思路

记录编号, 比较(三百行的高精度板子在招手)票数。

踩的坑

虽然是水题, 但是可以拿来熟悉语法啊, 所以(自撰一良方,服之)决定用STL来写, 遂翻车。

第一个坑是关于Lambda表达式的, 参数的数据类型填错了, 导致CE, 所以说数据类型要对应。

第二个坑是string的比较运算符, 查阅资料可以知道, string重载的比较运算符是通过strcmp()实现的。
下面放出glibc对strcmp()的实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <string.h>

#undef strcmp

#ifndef STRCMP
# define STRCMP strcmp
#endif

/* Compare S1 and S2, returning less than, equal to or
greater than zero if S1 is lexicographically less than,
equal to or greater than S2. */
int
STRCMP (const char *p1, const char *p2)
{
const unsigned char *s1 = (const unsigned char *) p1;
const unsigned char *s2 = (const unsigned char *) p2;
unsigned char c1, c2;

do
{
c1 = (unsigned char) *s1++;
c2 = (unsigned char) *s2++;
if (c1 == '\0')
return c1 - c2;
}
while (c1 == c2);

return c1 - c2;
}
libc_hidden_builtin_def (strcmp)

发现问题了吗, strcmp()直接从第一个字符开始比较, 所以 “9” 是大于 “100” 的。

完整AC代码