写在前面
为开拓心灵的处女地
走入禁区,也许——
就在那里牺牲
留下歪歪斜斜的脚印
给后来者
签署通行证
——《献给我的同代人》舒婷
进制转换(change)
可以使用 printf
的格式化输出,当然这些语言特性实际上相当鸡肋。
由于非常简单就不说了。
AZe 数
$\varphi(n) = n - 1$ 意味着小于 $n$ 的数均与 $n$ 互质。只有 $n$ 为质数满足这一点。
因此 AZe 数就是质数,故使用线性筛。
双月同天(moon)
前面的 $
字符很容易处理,如果您使用 char
数组传统字串,可以初始化为 char b[10001] = "$";
然后 scanf("%s%s", a, b + 1);
。如果使用 std::string
,可以先读入再 b = "$" + b
。
char
匹配可以用 strstr
函数,std::string
匹配可以用 find
方法。
由于存在 $a=3;$aa=5;
这种情况,找到后判断下一位是否为字母,如果不是字母即可。
姆 Q 的难题
我们暂时允许类别为空。
如果全部类别中没有只有一本书的,则每个类别去除一本,成为 $f(m - n, n)$。
如果「存在」一个类别有一本书,相当于在 $f(m, n - 1)$ 上有一本书掉了出来。
在允许为空的情况下,答案即为两部分之和。边界条件如果 n 为 0 有 0 种,n 为 1 或 $m\le1$ 也是 1 种(每个类别去除一本这个操作之前的那种情况)。
现在不允许类别为空,故答案变为 $f(m - n, n)$。
普通题++(simple++)
本题出题人说不卡 std::sort()
。
采用标准库 请参考评论区。<utility>
中的 std::pair
简单处理即可。