牛客编程巅峰赛S2赛季第7场青铜组代码
A 牛牛爱喝酒
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 返回牛牛能喝的最多的酒 * @param m int整型 酒单价 * @param n int整型 牛牛的现金 * @return int整型 */ int countWine(int m, int n) { int gai=0, sum=0; int p = n/m; sum += p; gai += p; while(p>=2 || gai>=4){ if(p>=2){ int k = p/2; p = p%2; gai += k; p += k; sum += k; } if(gai>=4){ int k = gai/4; p += k; gai %= 4; gai += k; sum += k; } } return sum; } };
B 牛牛的独特子序列
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param x string字符串 * @return int整型 */ vector<int> a[3]; bool check(const string &x, const int &k){ //printf("k=%d\n", k); if(k > a[0].size()) return 0; int i = k-1; //printf("i0=%d ", i); i = upper_bound(a[1].begin(), a[1].end(), a[0][i]) - a[1].begin(); i += k-1; //printf("i1=%d ", i); if(i >= a[1].size()) return 0; i = upper_bound(a[2].begin(), a[2].end(), a[1][i]) - a[2].begin(); i += k-1; //printf("i2=%d\n", i); if(i >= a[2].size()) return 0; return 1; } int Maximumlength(string x) { // write code here int len=x.size(); for(int i=0 ; i<len ; i++){ if(x[i] <= 'c') a[x[i]-'a'].push_back(i); } /* for(int i=0 ; i<3 ; i++){ for(int &k : a[i]){ printf("%d ", k); } printf("\n"); }*/ int l=0, r=len; while(r-l>1){ int m = (l+r)/2; if(check(x, m)){ //printf("k=%d : ok\n", m); l=m; } else{ //printf("k=%d : no!\n", m); r=m; } } return l*3; } };
class Solution { public: /** * * @param n int整型 * @param p int整型 * @param q int整型 * @return int整型 */ int Gameresults(int n, int p, int q) { // write code here if(p>=n) return 1; if(p==q) return n%(p+1)==0?-1:1; if(p>q) return 1; return -1; } };