The question:

Give four integers: A,B, K,C A,B, K,C A, K,C A,B,C A,B,C are all units digits greater than 0, Ask the number of numbers C, C, C among all the K, K digits that consist only of A, A, A or B, B, B (each of the K, K digits is A, A, A or B, B, B).

There are three cases:

  1. When a is equal to b is equal to c, and a is equal to b is equal to c, and a is equal to b is equal to c, then there must be only one case of composition, and the number is k, k, K.
  2. When a! = c a! =c a! =c and b! = c b! =c b! When theta is equal to c, it must be 0, 0, 0.
  3. When a = a = a = c c c | | b = c = c b b = c, the combination of a total situation is 2 k 2 ^ 2 k k, the number of the c c c is 2 k ∗ k 2 \ frac {^ 2 k * k} {2} 22 k ∗ k, Here a quick power of 2k−1 2^{k-1} 2k−1 is used

This problem card I fast power, used half a year before the template is wrong.

AC code:

#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <string>
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <stack>
#include <queue>
using namespace std;
#define sd(n) scanf("%d", &n)
#define sdd(n, m) scanf("%d%d", &n, &m)
#define sddd(n, m, k) scanf("%d%d%d", &n, &m, &k)
#define pd(n) printf("%d\n", n)
#define pc(n) printf("%c", n)
#define pdd(n, m) printf("%d %d\n", n, m)
#define pld(n) printf("%lld\n", n)
#define pldd(n, m) printf("%lld %lld\n", n, m)
#define sld(n) scanf("%lld", &n)
#define sldd(n, m) scanf("%lld%lld", &n, &m)
#define slddd(n, m, k) scanf("%lld%lld%lld", &n, &m, &k)
#define sf(n) scanf("%lf", &n)
#define sc(n) scanf("%c", &n)
#define sff(n, m) scanf("%lf%lf", &n, &m)
#define sfff(n, m, k) scanf("%lf%lf%lf", &n, &m, &k)
#define ss(str) scanf("%s", str)
#define rep(i, a, n) for (int i = a; i <= n; i++)
#define per(i, a, n) for (int i = n; i >= a; i--)
#define mem(a, n) memset(a, n, sizeof(a))
#define debug(x) cout << #x << ":" << x << endl
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
#define mod(x) ((x) % MOD)
#define gcd(a, b) __gcd(a, b)
#define lowbit(x) (x & -x)
typedef pair<int.int> PII;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
const int MOD = 1e9 + 7;
const double eps = 1e-9;
inline int read(a)
{
    int ret = 0, sgn = 1;
    char ch = getchar(a);while (ch < '0' || ch > '9')
    {
        if (ch == The '-')
            sgn = - 1;
        ch = getchar(a); }while (ch >= '0' && ch <= '9')
    {
        ret = ret * 10 + ch - '0';
        ch = getchar(a); }return ret * sgn;
}
inline void Out(int a) / / Ea after oIa creates O
{
    if (a > 9)
        Out(a / 10);
    putchar(a % 10 + '0');
}

ll gcd(ll a, ll b)
{
    return b == 0 ? a : gcd(b, a % b);
}

ll lcm(ll a, ll b)
{
    return a * b / gcd(a, b);
}
/// quick power m^k%mod
ll qpow(ll a, ll b, ll mod)
{
    ll ans = 1;
    while (b)
    {
        if (b & 1)
        {
            ans = ans * a;
            if (ans >= mod)
                ans = ans % mod + mod;
        }
        a *= a;
        if (a >= mod)
            a = a % mod + mod;
        b >>= 1;
    }
    return ans;
}
// Fast power inverse element
int Fermat(int a, int p) // Fermat finds the inverse of A with respect to b
{
    return qpow(a, p - 2, p);
}

/// extend Euclid
ll exgcd(ll a, ll b, ll &x, ll &y)
{
    if (b == 0)
    {
        x = 1;
        y = 0;
        return a;
    }
    ll g = exgcd(b, a % b, x, y);
    ll t = x;
    x = y;
    y = t - a / b * y;
    return g;
}
const int N = 1e6 + 10;
int n, m;
int a, b, k, c;

int main(a)
{
    sdd(a, b);
    sdd(k, c);
    ll ans = 1;
    if (a == c && b == c)
    {
        pd(k);
    }
    else if(c ! = a && c ! = b) {puts("0");
    }
    else
    {
        ans = qpow(2, k - 1, MOD) % MOD;
        ans = ans * 1ll * k % MOD;
        pld(ans);
    }
    return 0;
}
Copy the code