牛客编程巅峰赛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;
}
};
查看17道真题和解析