牛客练习赛119 A ~ D

文章目录

    • A.美丽新世界
    • B.第二次生命
    • C.夜色亵渎者
    • D.在仙境之外

A.美丽新世界

思路:暴力即可;直接输出不知道为什么过不了……

ll f[N];
void solve()
{
    ll n, p, a;
    cin >> f[1] >> f[2] >> p >> a >> n;
    for (ll i = 3; i <= n; i++) {
        f[i] = log2(ksm(f[i-1], f[i-2],p) % p + 1) + a;
    }
     
    for(int i = 1; i <= n; i ++) cout <<  f[i] << ' ';
}

B.第二次生命

思路:只有两个位置之间没有人坐,这个距离才不为 0 0 0。因此我们按照题目给出的公式,然后写出来公式 a n s = m a x ( a n s , ( a [ ( i + k + 1 ) ans = max(ans, (a[(i + k + 1) ans=max(ans,(a[(i+k+1) % n ] − a [ i ] + l ) n] - a[i] + l) % l); n]a[i]+l)

map<int, int> mp;
void solve()
{
    int n, l, k;
    cin >> n >> l >> k;
    vector<ll> a(n);
    for (int i = 0; i < n; i++) cin >> a[i];
    sort(a.begin(), a.end());

    ll ans = 0;
    for (int i = 0; i < n; i++) {
        ans = max(ans, (a[(i + k + 1) % n] - a[i] + l) % l);
    }
    cout << ans % l << endl;
}

C.夜色亵渎者

思路:矩阵变形。 a i a_i ai ^ b j = a j b_j = a_j bj=aj ^ b i b_i bi 可变为 a i a_i ai ^ b i = a j b_i = a_j bi=aj ^ b j b_j bj。同时对角线有 n n n 个,

map<ll, ll> mp;
void solve()
{
    ll n, l, k;
    cin >> n;
    vector<int> a(n), b(n);
    for (int i = 0; i < n; i++) cin >> a[i];
    for (int i = 0; i < n; i++) cin >> b[i];

    ll ans = 0;
    for (int i = 0; i < n; i++) {
        ans += mp[a[i] ^ b[i]];
        mp[a[i] ^ b[i]] += 1;
    }

    cout << 1ll * ans * 2+ n << endl;
}

D.在仙境之外

思路:将数组 a a a 第一个数 a 1 a_1 a1 除本身变为 1 1 1,后面就通过二进制来解题。当碰到 1 1 1 的时候,加入当前 a 1 a_1 a1

map<ll, ll> mp;

ll ans1[N], ans2[N], ans3[N];
char c[N];
ll n, S;
ll a[N];
void solve()
{
    cin >> n >> S;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    int cnt = 1;
    ans1[1] = 1, ans2[1] = 1, ans3[1] = 1, c[1] = '/';
    while (S) {
        if (S & 1) {
            cnt++;
            ans1[cnt] = n + 1, ans2[cnt] = n + 1, ans3[cnt] = 1, c[cnt] = '+';
        }
        cnt++;
        ans1[cnt] = 1, ans2[cnt] = 1, ans3[cnt] = 1, c[cnt] = '+';
        S >>= 1;
    }
    cout << cnt << '\n';
    for (int i = 1; i <= cnt; i++) {
        cout << ans1[i] << ' ' << ans2[i] << ' ' << ans3[i] << ' ' << c[i] << '\n';
    }
}

你可能感兴趣的:(比赛,算法,数据结构)