牛客编程巅峰赛S2赛季第六场考题参考代码

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

初级场B&高级场A String II
class Solution {
public:
    /**
     * 
     * @param k int整型 表示最多的操作次数
     * @param s string字符串 表示一个仅包含小写字母的字符串
     * @return int整型
     */
    int a[26];
    int string2(int k, string s) {
        // write code here
        //memset(a,0,sizeof(a));
        int n = s.length();
        /*for(int i = 0; i < k; ++i)
            ++a[s[i]-'a'];*/
        int ans = 0;
        for(int i = 0; i < 26; ++i){
            priority_queue<int> q;
            while (!q.empty()) q.pop();
            for(int j = 0; j < n; ++j) q.push(-abs(s[j]-i-'a'));
            int te = k;
            int now = 0;
            while (!q.empty()){
                int tn=q.top();
                if (te+tn>=0){
                    te+=tn;
                    q.pop();
                    ++now;
                }else
                    break;
            }
            if (now > ans)
                ans = now;
        }
        return ans;
    }
};

初级场C&高级场B Bang! Bang!
class Solution {
public:
    /**
     * 
     * @param n int整型 乐谱总音符数
     * @param m int整型 重音符数
     * @param k int整型 重音符之间至少的间隔
     * @return long长整型
     */
    const int p=1000000007;
    long long f[1100][1100],s[1100][1100];
    long long solve_bangbang(int n, int m, int k) {
        // write code here
        memset(f,0,sizeof f);
        memset(s,0,sizeof s);
        if (m==0) return 1;
        if (m==1) return n;
        for(int i=1;i<=n;++i){
            f[1][i]=1;
            s[1][i]=i;
        }
        for(int j=2;j<=m;++j){
            for(int i=k+1;i<=n;++i)
                f[j][i]=s[j-1][i-k-1];
            for(int i =1;i<=n;++i){
                s[j][i]=s[j][i-1]+f[j][i];
                if (s[j][i]>=p) s[j][i]-=p;
            }
        }
        return s[m][n];
    }
};

高级场C 天花板
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param n int整型 
     * @return long长整型
     */
    long long Sum(int n) {
        // write code here
        long long ans = 0;
        long long i=1,j,te;
        while (i<=n){
            te=n/i;
            j=n/te;
            ans+=(j-i+1)*te;
            i=j+1;
        }
        ans+=n;
        for(int i = 1; i*i<=n;++i) if (n%i==0){
            ans--;
            if (i*i<n) ans--;
        }
        return ans;
    }
};


#笔试题目##题解#
全部评论

相关推荐

一名愚蠢的人类:多少games小鬼留下了羡慕的泪水
投递荣耀等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务