CF256D Liars and Serge

题目描述

有 $n$ 个人坐在桌子旁成一排。我们知道每个人要么总是说真话,要么总是说谎。 小 Serge 问了他们一个问题:你们当中有多少人总是说真话?每个人都清楚所有人的身份(诚实或说谎者)。诚实的人会说出正确答案,说谎者会说 1 到 $n$ 之间的任意一个**不是正确答案**的整数。每个说谎者独立选择自己的答案,因此两个不同的说谎者可能会给出不同的答案。 Serge 除了他们对这个问题的回答外,对这些人一无所知。他拿出一张纸,记下了 $n$ 个整数 $a_{1},a_{2},...,a_{n}$,其中 $a_{i}$ 是第 $i$ 个人的回答。已知 Serge 发现,正好有 $k$ 个人是说谎者。 Serge 想知道,有多少种 $n$ 个长度的答案序列(即 $a$ 序列),能得出正好有 $k$ 个人是说谎者。由于这种答案序列可能非常多,请输出答案对 $777777777$ 取余的结果。

输入格式

第一行包含两个整数 $n$,$k$,$(1 \leq k \leq n \leq 2^{8})$。保证 $n$ 是 2 的幂。

输出格式

输出一个整数,表示满足条件的答案序列种数,对 $777777777$ 取余。

说明/提示

由 ChatGPT 5 翻译