2 条题解
-
0
按题意直接模拟即可。
AC code:
#include <bits/stdc++.h> using namespace std; const long long MOD = 127237991; long long mod_pow(long long base, long long exponent, long long modu) { long long result = 1; base %= modu; while (exponent > 0) { if (exponent % 2 == 1) { result = (result * base) % modu; } base = (base * base) % modu; exponent /= 2; } return result; } int main() { long long n; cin >> n; if (n == 0) { cout << 0 << endl; return 0; } long long result = mod_pow(2, n - 1, MOD); cout << result << endl; return 0; } -
0
不难发现,一种语言集合与它关于语言全集的补集一定没有交集,因此这两个集合中只能出现一个——这意味着答案一定不大于总集合数 的一半,即 。
显然让所有人掌握第 种语言是合法的,此时的答案恰好为 ,故最终的答案为 。
#include <bits/stdc++.h> using namespace std; const int P = 127237991; int power(int b, int k, int p) { if (k == 0) return 1; if (k == 1) return b; long long s = power(b, k >> 1, p); s = s * s % p; if (k & 1) s *= b; return s % p; } int main() { long long n; cin >> n; n = (n - 1) % (P - 1); cout << power(2, n, P) << endl; return 0; }
- 1
信息
- ID
- 116
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 5
- 已通过
- 3
- 上传者