欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

牛客编程巅峰赛S2第6场 - 青铜&白银&黄金

程序员文章站 2022-06-15 19:36:49
...

牛客: 牛客编程巅峰赛S2第6场 - 青铜&白银&黄金

拉跨操作, 就 a 了一题
牛客编程巅峰赛S2第6场 - 青铜&白银&黄金




第一题: 牛牛做除法Ⅱ

牛客编程巅峰赛S2第6场 - 青铜&白银&黄金

直接暴力就行了。。。。。

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回满足条件的最大的x。
     * @param a int整型 代表题意中的a
     * @param b int整型 代表题意中的b
     * @param n int整型 代表题意中的n
     * @return int整型
     */
    public int solve (int a, int b, int n) {
        // write code here
        for(int i = n; i >= 0; i--){
            if(i % a == b) return i;
        }
        return 0;
    }
}




第二题: String Ⅱ

牛客编程巅峰赛S2第6场 - 青铜&白银&黄金

必不可能是用贪心解。。

枚举所有答案。

枚举最后是以哪个字母作为最长子序列,26种情况取最大值

import java.util.*;


public class Solution {
    /**
     * 
     * @param k int整型 表示最多的操作次数
     * @param s string字符串 表示一个仅包含小写字母的字符串
     * @return int整型
     */
    public int string2 (int k, String s) {
        // write code here
        int[] map = new int[26];
        char[] cs = s.toCharArray();
        
        for(int i = 0; i < cs.length; i++){
            map[cs[i] - 'a']++;
        }
        
        int ans = 0;
        for(int i = 0;  i < 26; i++){
            int temp = k, now = map[i];
            for(int j = 1;  j < 26; j++){
                if(i - j >= 0){
                    int det = Math.min(map[i - j], temp / j);
                    now += det;
                    temp -= j * det;
                }
                if(i + j <= 25){
                    int det = Math.min(map[i + j], temp / j);
                    now += det;
                    temp -= j * det;
                }
            }
            ans = Math.max(ans, now);
        }
        
        return ans;
    }
}




第三题: Bang! Bang!

牛客编程巅峰赛S2第6场 - 青铜&白银&黄金


dp 题, 不会,待补