竞赛讨论区 > 牛客编程巅峰赛S2第6场 - 青铜&白银&黄金题解
头像
白渐若离
发布于 2020-12-04 21:13
+ 关注

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

A题(判断一下)
classSolution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回满足条件的最大的x。
     * @param a int整型 代表题意中的a
     * @param b int整型 代表题意中的b
     * @param n int整型 代表题意中的n
     * @return int整型
     */
    intsolve(inta,intb,intn) {
        intans=0;
        intk=n/a;
        if(n>=k*a+b)
            returnk*a+b;
        else
            return(k-1)*(a)+b;
        
    }
};
B题(暴力)
class Solution {
public:
    /**
     *
     * @param k int整型 表示最多的操作次数
     * @param s string字符串 表示一个仅包含小写字母的字符串
     * @return int整型
     */
int string2(int k, string s)
{
    int c[300];
    for(int i=0;i<=200;i++)
    c[i]=0;
    for (int i = 0; i < s.length(); i++)
    {
        c[s[i]]++;
    }
    int mx = 0;
    for (int i = 'a'; i <= 'z'; i++)
    {
        int l = i - 1;
        int r = i + 1;
        int ans = k;
        int sum = c[i];
        int len = 1;
        while ((l >= 'a' || r <= 'z') && ans > 0)
        {
 
            if (ans >= len * c[l])
            {
                ans -= len * c[l];
                sum += c[l];
            }
            else
            {
                sum += ans / len;
                break;
            }
 
            if (ans >= len * c[r])
            {
                ans -= len * c[r];
                sum += c[r];
            }
            else
            {
                sum += ans / len;
                break;
            }
            l--;
            r++;
            len++;
        }
        mx = max(mx, sum);
    }
    return mx;
}
};
C题(排列组合)
class Solution {
public:
    /**
     * 
     * @param n int整型 乐谱总音符数
     * @param m int整型 重音符数
     * @param k int整型 重音符之间至少的间隔
     * @return long长整型
     */
    long long solve_bangbang(int n, int m, int k)
{
    long long md = 1000000007;
    long long ans = 1;
    long long sum = 1;
    long long kk=1;
    if( n - (m - 1) * k<m)
    return 0;
    for (long long i = n - (m - 1) * k; i > n - (m - 1) * k - m; i--)
    {
        ans = (ans * i) % md;
    }
    for (long long i = m; i >= 1; i--)
    {
        sum = (sum * i) % md;
    }
    long long y=md-2;
     while (y)
    {
        if (y & 1)
        {
            kk = (kk * sum) % md;
        }
       sum = (sum * sum) % md;
        y >>= 1;
    }
    return max(ans%md*kk%md,0ll);
}
};


全部评论

(4) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐