2 条题解

  • 0
    @ 2025-12-1 10:43:54

    按题意直接模拟即可。

    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
      @ 2025-9-4 22:00:03

      不难发现,一种语言集合与它关于语言全集的补集一定没有交集,因此这两个集合中只能出现一个——这意味着答案一定不大于总集合数 2n2^n 的一半,即 2n−12^{n-1}。

      显然让所有人掌握第 11 种语言是合法的,此时的答案恰好为 2n−12^{n-1},故最终的答案为 2n−12^{n-1}。

      #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
      上传者