笔试时间:2023年9月9日 秋招  第一题  题目:小美的abc串  小美拿到了一个仅由“abc"三种字母组成的字符串,她每次操作会同时对所有字母进行如下变换:把a变成bc,把b变成ca,把 c变成ab。小美将操作k次,请你输出最终的字符串。  输入描述  第一行输入一个字符串,长度不超过100;  第二行输入一个正整数k。  1<= k <= 5  输出描述  输出最终的字符串。  样例输入     abc   2    样例输出     caababbcbcca    提示  第一次操作,字符串变成bccaab  第二次操作,字符串变成 caababbcbcca  参考题解  模拟  Java:[此代码未进行大量数据的测试,仅供参考]  import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        String s = scanner.next();        int k = scanner.nextInt();        for (int i = 0; i < k; i++) {            StringBuilder t = new StringBuilder();            for (char ch : s.toCharArray()) {                if (ch == 'a') {                    t.append("bc");                } else if (ch == 'b') {                    t.append("ca");                } else {                    t.append("ab");                }            }            s = t.toString();        }        System.out.println(s);    }}  Python:[此代码未进行大量数据的测试,仅供参考]  s = input()k = int(input())for _ in range(k):    t = ""    for ch in s:        if ch == 'a':            t += 'bc'        elif ch == 'b':            t += 'ca'        else:            t += 'ab'    s = tprint(s)  第二题  题目:小美的加减法2.0  小美有一个数组a,她想把这个数组求和,即a1 + a2 + a3 + ...+an。现在她想把其中一个加号变成减号,但小美是小学生,不会负数的加减法,因此计算过程中不能出现负数。小美想知道改变符号后答案的最小值是案少,如果不能改变符号,则输出-1。  输入描述  第一行输入一个整数n(1 < n < 10^5),表示数组长度;  第二行输入n个整数表示数组a(1 < ai< 10^9)。  输出描述  输出改变符号后的答案,若无法改变,则输出 -1。  样例输入     示例一:   3   3 2 1   示例二:   3   1 2 4    样例输出     示例一:   2   提示: 3-2+1: 3-2=1,1+1=2;3+2-1: 3+2=5,5-1=4   示例二:   -1   提示:   1-2+4: 1-2=-1,-1+4=3 ;1+2-4: 1+2=3,3-4=-1    参考题解  前缀和  Java:[此代码未进行大量数据的测试,仅供参考]  import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int n = scanner.nextInt();        long[] s = new long[n + 1];        long[] a = new long[n + 1];        for (int i = 1; i <= n; i++) {            a[i] = scanner.nextLong();            s[i] = s[i - 1] + a[i];        }        long inf = 1000000000000000000L;        long ans = inf;        for (int i = 1; i <= n; i++) {            if (a[i] <= s[i - 1]) {                ans = Math.min(ans, s[n] - a[i] * 2);            }        }        if (ans == inf) {            ans = -1;        }        System.out.println(ans);    }}  Python:[此代码未进行大量数据的测试,仅供参考]  n = int(input())a = list(map(int, input().split()))s = [0] * (n + 1)for i in range(1, n + 1):    s[i] = s[i - 1] + a[i - 1]inf = float('inf')ans = inffor i in range(1, n + 1):    if a[i - 1] <= s[i - 1]:        ans = min(ans, s[n] - a[i - 1] * 2)if ans == inf:    ans = -1print(ans)  第三题  题目:01串变幻  对于一个01串,每次可以选择两个相邻的相同字符删除,删除到不能删除为止。最终得到的字符串长度,即原串的价值。现在给定了一个01串,你必须改恰好k次,可以将某个"1"修改为0"或者0"修改为“1",请问最后该串价值的最小值是多少?  输入描述  第一行输入两个正整数n和k,代表字符串的长度、修改次数;  第二行输入一个长度为n的字符串,保证仅由'0'和 '1'构成。  1<= k= n <=10^5  输出描述  k次操作后字符串价值的最小值。  样例输入     示例一:   3 1   101   提示:将第一个字符修改为"0",字符串变为"001",可以将两个"删除,剩余长度是"1’。因此最小价值为"1’。   示例二:   2 1   00    样例输出     示例一:   1   示例二:   2    参考题解  Java:[此代码未进行大量数据的测试,仅供参考]  import java.util.Sc
点赞 2
评论 0
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务