笔试时间:2024年03月16日  历史笔试传送门:2023秋招笔试合集  第一题  题目:小美点外卖  小美是美团外卖的忠实用户,她经常去美团外卖 app 上面点外卖,因为会员红包的性价比太高啦!现在小美点了若干道菜,她希望你计算一个订单的总价。你能帮帮她吗?  输入描述  第一行输入一个正整数n,代表菜品总数。  第二行输入n个正整数,代表每道菜的价格。  第三行输入两个正整数x和y,x代表满减的价格,y代表红包的价格。  1<=n<=10^5  1<=x,y,ai<=10^9  保证所有的和大于,保证会用到满减。  输出描述  一个正整数,代表小美最终应付的钱数。  样例输入     4   10 20 10 20   25 10    样例输出     25    说明  四个菜一共 60 元,满减减掉了 25 元,再用一个 10 元的红包,因此需要付 25 元。  参考题解  直接统计所有的总价值,减去减免的价格即可。  C++:[此代码未进行大量数据的测试,仅供参考]  #include <iostream>int main() {    int num;    std::cin >> num;    long long sum = 0;    for (int i = 0; i < num; ++i) {        long long temp;        std::cin >> temp;        sum += temp;    }    long long l1, l2;    std::cin >> l1 >> l2;    sum = sum - l1 - l2;    std::cout << sum << std::endl;    return 0;}  Java:[此代码未进行大量数据的测试,仅供参考]  import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息public class Main {    public static void main(String[] args) {        Scanner in = new Scanner(System.in);        // 注意 hasNext 和 hasNextLine 的区别        int num = in.nextInt();        long sum = 0l;        for (int i = 0; i < num; i++) {            long temp = in.nextLong();            sum += temp;        }        long l1 = in.nextLong();        long l2 = in.nextLong();        sum = sum - l1 - l2;        System.out.println(sum);    }}  Python:[此代码未进行大量数据的测试,仅供参考]  num = int(input())sum = 0for i in range(num):    temp = int(input())    sum += templ1, l2 = map(int, input().split())sum = sum - l1 - l2print(sum)  第二题  题目:小美的合法单词  小美定义以下三种单词是合法的:     所有字母都是小写。例如:good   所有字母都是大写。例如:APP   第一个字母大写,后面所有字母都是小写。例如:Alice    现在小美拿到了一个单词,她每次操作可以修改任意一个字符的大小写。小美想知道最少操作几次可以使得单词变成合法的?  输入描述  一个仅由大写字母和小写字母组成的字符串,长度不超过10^5。  输出描述  一个整数,代表操作的最小次数。  样例输入     AbC    样例输出     1    说明  变成 ABC 或者 Abc 均可。只需要一次操作。  参考题解  统计大小写出现次数,取大改小,小改大,首字母是大写后边都改为小写三种取最小。  C++:[此代码未进行大量数据的测试,仅供参考]  #include <iostream>#include <string>int main() {    std::string s;    std::getline(std::cin, s);    int small = 0, big = 0;    int res = s.length();    for (int i = 0; i < s.length(); ++i) {        char ch = s[i];        if(ch >= 'a' && ch <= 'z')             small++;        else if(ch >= 'A' && ch <= 'Z')             big++;    }    int temp = s.length();    if(s[0] >= 'A' && s[0] <= 'Z')         temp = s.length() - 1 - small;    res = std::min(std::min(small, big), temp);    std::cout << res << std::endl;    return 0;}  Java:[此代码未进行大量数据的测试,仅供参考]  import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息public class Main {    public static void main(String[] args) {        Scanner in = new Scanner(System.in);        // 注意 hasNext 和 hasNextLine 的区别        String s = in.nextLine();        int small = 0, big = 0;        int res = s.length();        for (int i = 0; i < s.length(); i++) {            char ch = s.charAt(i);            if(ch >= 'a' && ch <= 'z') small++;            else if(ch >= 'A' && ch <= 'Z') big++;        }        int temp = s.length();        if(s.charAt(0) >= 'A' && s.charAt(0) <= 'Z') temp = s.length() - 1 - small;        res = Math.min(Math.min(small, big), temp);        System.out.println(res);    }}  Python:[此代码未进行大量数据的测试,仅供参考]  s = input()small = sum(1 for ch in s if ch.islower())big = sum(1 for ch in s if ch.isupper())res = len(s)temp = len(s)if s[0].isupper():    temp = len(s) - 1 - smallres = min(min(small, big), temp)print(res)  第三题  题目:翻倍元素  小美拿到了一个数组,她每次操作会将除了第x个元素的其余元素翻倍,一共操作了q次。请你帮小美计算操作结束后所有元素之和。由于答案过大,请对10^9+7取模。  输入描述  第一行输入两个正整数n,q,代表数组的大小和操作次数。  第二行输入n个正整数ai,代表数组的元素。  接下来的q行,每行输入一个正整数xi,代表第i次操作未被翻倍的元素。  1<=n,q<=10^5,1<=xi<=n,1<=ai<=10^9  输出描述  一个整数,代表操作结束后所有元素之和模10^9+7的值。  样例输入     4 2   1 2 3 4   1   2    样例输出     34    说明:第一次操作后,数组变成[1,4,6,8],第二次操作后,数组变成[2,4,12,16],所有元素之和为 34。  参考题解  使用数组记录翻倍次数,结合快速幂进行优化;  C++:[此代码未进行大量数据的测试,仅供参考]  #include <iostream>#include <vector>const int MOD = 1000000007;long long powMod(long long x, int n, int MOD) {    long long result = 1;    x = x % MOD;    while (n > 0) {        if (n & 1) {            result = (result * x) % MOD;        }        x = (x * x) % MOD;        n >>= 1;    }    return result;}int main() {    int n, q;    std::cin >> n >> q;    std::vector<int> nums(n);    std::vector<int> times(n, q);    for (int i = 0; i < n; ++i) {        std::cin >> nums[i];    }    for (int i = 0; i < q; ++i) {        int x;        std::cin >> x;        times[x - 1]--;    }    long long sum = 0;    for (int i = 0; i < n; ++i) {        long long val = (long long)nums[i] * powMod(2, times[i], MOD) % MOD;        sum = (sum + val) % MOD;    }    std::cout << sum << std::endl;    return 0;}  Java:[此代码未进行大量数据的测试,仅供参考]  import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息public class Main {    private static final int MOD = 1000000007;    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int n = scanner.nextInt();        int q = scanner.nextInt();        int[] nums = new int[n];        int[] times = new int[n];        for (int i = 0; i < n; i++) {            nums[i] = scanner.nextInt();            times[i] = q;        }        for (int i = 0; i < q; i++) {            int x = scanner.nextInt();            times[x -
点赞 2
评论 0
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务