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