牛客编程巅峰赛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);
}
}; 
