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

