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) 回帖