携程 4.12 笔试

Q1

#include <cstdio>
#include <iostream>
using namespace std;

int main() {
    int t; scanf("%d", &t);
    for (int i = 0; i < t; i++) {
        int n; scanf("%d", &n);
        if (n <= 3) {
            printf("-1\n");
        } else if (n % 2 == 0) {
            printf("%d %d\n",n, n);
        } else {
            printf("%d %d\n", n - 1, n + 1);
        }
    }
}
// 64 位输出请用 printf("%lld")

Q2

#include <algorithm>
#include <cstdio>
#include <iostream>
#define int long long
#define ll long long
using namespace std;
const int N = 2e5 + 10;
char s[N];
int a[N];
int w[N];
int c[N];
signed main() {
    int n; scanf("%lld", &n);
    scanf("%s", s);
    for (int i = 0; i < n - 1; i++) {
        scanf("%lld", &w[i]);
    }
    for (int i = 0; i < n; i++) {
        a[i] = s[i] - '0';
    }

    ll total = 0L;
    int len = 0;
    for (int i = 0; i < n; i++) {
        int j = i + 1;
        while (j < n && a[j] == a[i]) {
            j++;
        }
        j--;
        // [i, j] 

        if (j < n - 1) {
            // printf("%lld\n", w[j]);
            c[len++] = w[j];
        }

        // printf("%d %d\n", i, j);
        for (int k = i; k < j; k++) {
            total = total + w[k];
        }
        i = j;
    }
    sort(c, c + len);

    // for (int i = 0; i < len; i++) {
    //     printf("%lld ", c[i]);
    // }
    ll ans = total;

    if (len > 0) {
        ans += c[len - 1];
    }

    if (len > 1) {
        ans += c[len - 2];
    }

    printf("%lld\n", ans);
}
// 64 位输出请用 printf("%lld")

Q3

#include <iostream>
#include <algorithm>
#define left LLL
#define right RRR
#define ll long long
using namespace std;
const int N = 2e5 + 10;
int x[N], left[N], right[N];
char s[N];

signed main() {
    int t;
    scanf("%d", &t);
    while (t--) {
        int n, k;
        scanf("%d%d", &n, &k);
        for (int i = 0; i < n; i++) {
            scanf("%d", &x[i]);
        }
        scanf("%s", s);
        int leftNum = 0, rightNum = 0;
        for (int i = 0; i < n; i++) {
            if (s[i] == '0') {
                left[leftNum++] = x[i];
            } else {
                right[rightNum++] = x[i];
            }
        }
        sort(left, left + leftNum);
        sort(right, right + rightNum);

        ll ans = 0L;
        int posLeft = leftNum - 1;
        int r = rightNum - 1;

        while (r >= 0 && right[r] > left[posLeft]) {
            r--;
        }
        int l = r;

        while (posLeft >= 0) {

            while (r >= 0 && right[r] > left[posLeft]) {
                r--;
            }

            while ((left[posLeft] - right[l]) <= 2 * k && l >= 0) {
                l--;
            }
            ans += 1LL * (r - l);
            posLeft -= 1;
        }
        printf("%lld\n", ans);
    }
}
// 64 位输出请用 printf("%lld")

Q4

import java.util.Scanner;
import java.util.Queue;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.HashMap;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    static class Pair {
        int value;
        int count;
        Pair(int v, int c) {
            value = v;
            count = c;
        }
    }
    private static long power(long x, long n, long mod) {
        if (n == 0) return 1;
        if (n == 1) return x;
        long m = power(x, n / 2, mod);
        m = m * m % mod;
        if (n % 2 == 1) {
            m = m * x;
        }
        return m;
    } 
    public static void main(String[] args) {
        int mod = (int)(1e9 + 7);
        Scanner in = new Scanner(System.in);
        int t = in.nextInt();
        for (int times = 0; times < t; times++) {
            int n = in.nextInt(), m = in.nextInt();
            Queue<Pair> q = new ArrayDeque<Pair>();
            q.add(new Pair(n, 1));
            int res = 0;
            for (int i = 0; i < m; i++) {
                HashMap<Integer, Integer> map = new HashMap<>();
                // System.out.println("i = " + i);
                while (q.size() > 0) {
                    Pair e = q.poll();
                    map.put(e.value / 2 + 1, (map.getOrDefault(e.value / 2 + 1, 0) + 2 * e.count % mod) % mod);
                    if (e.value % 2 == 1) {
                        map.put(2, (map.getOrDefault(2, 0) + e.count) % mod);
                    }
                }
                boolean flag = true;
                for (HashMap.Entry<Integer, Integer> e: map.entrySet()) {
                    q.add(new Pair(e.getKey(), e.getValue()));
                    if (e.getKey() > 2) {
                        flag = false;
                    }
                }
                if (flag) {
                    res = m - 1 - i;
                    break;
                }
            }
            long ans = 0;
            while (q.size() > 0) {
                Pair e = q.poll();
                if (e.value == 1) {
                    long one = (res + 1) * power(2, res, mod) % mod;
                    ans = (ans + one * e.count % mod) % mod;
                } else if (e.value == 2) {
                    long one = power(2, res + 1, mod);
                    ans = (ans + one * e.count % mod) % mod;
                } else {
                    ans = (ans + e.value * e.count % mod) % mod;
                }
            }
            System.out.println(ans);
        }
    }
}

全部评论
拼多多招27届实习生啦&nbsp;https://careers.pddglobalhr.com/campus/intern/detail?t=dRvUVvcTiA
点赞 回复 分享
发布于 今天 13:39 上海

相关推荐

04-10 18:32
已编辑
四川大学 Java
牛客17492028...:我只能说你这学历boss有的是人要,
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
4
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务