牛客编程巅峰赛S2赛季第7场AC代码
初级场A 牛牛爱喝酒
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 返回牛牛能喝的最多的酒 * @param m int整型 酒单价 * @param n int整型 牛牛的现金 * @return int整型 */ int countWine(int m, int n) { // write code here int ans=n/m; int jp=ans,pg=ans; while (jp>=2||pg>=4){ int te=pg/4; ans+=te; jp+=te; pg=pg%4+te; te=jp/2; ans+=te; jp=jp%2+te; pg+=te; } return ans; } };
初级场B&高级场A 牛牛的独特子序列
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param x string字符串 * @return int整型 */ string t; bool che(int x){ int te=0; int i=0; for(;i<t.length();++i){ if (t[i]=='a') ++te; if (te==x) break; } if (i==t.length()) return 0; te=0; for(;i<t.length();++i){ if (t[i]=='b') ++te; if (te==x) break; } if (i==t.length()) return 0; te=0; for(;i<t.length();++i){ if (t[i]=='c') ++te; if (te==x) break; } if (i==t.length()) return 0; return 1; } int Maximumlength(string x) { // write code here int n=x.length(); int l=0; int r=n/3; int mid; t=x; while (l<r){ mid=(l+r+1)>>1; if (che(mid)) l=mid;else r=mid-1; } return l*3; } };
初级场C&高级场B 分贝壳游戏
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<q){ return (n<=p)?1:-1; } if (p>q){ return 1; } if (p==q){ return (n%(p+1))?1:-1; } return 0; } };高级场C 经过直径的点
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param n int整型 节点个数 * @param u int整型vector * @param v int整型vector * @return int整型 */ vector<int> e[110000]; int d[110000],q[110000],he,ta,r1,r2,las[110000],dep[110000],ma; bool b[110000],ind[110000]; void bfs(int st){ q[he=ta=1]=st; d[st]=0; las[st]=0; memset(b,0,sizeof b); b[st]=1; while (he<=ta){ int &x=q[he]; for(int y:e[x]) if (!b[y]){ b[y]=1; d[y]=d[x]+1; las[y]=x; q[++ta]=y; } ++he; } } void dfs(int x,int fa){ if (dep[x]==ma) ind[x]=1; for(int y:e[x]) if (y!=fa&&!ind[y]){ dep[y]=dep[x]+1; dfs(y,x); if (ind[y]) ind[x]=1; } } int PointsOnDiameter(int n, vector<int>& u, vector<int>& v) { // write code here for(int i=0;i<u.size();++i){ e[u[i]].push_back(v[i]); e[v[i]].push_back(u[i]); } bfs(1); r1=1; for(int i=2;i<=n;++i) if (d[i]>d[r1]) r1=i; bfs(r1); r2=1; for(int i=2;i<=n;++i) if (d[i]>d[r2]) r2=i; int te=r2; /*for(int i=0;i<=d[r2];++i){ ind[te]=1; dep[te]=min(i,d[r2]-i); te=las[te]; } for(int i=1;i<=n;++i) if (ind[i]){ ma=dep[i]; dep[i]=0; dfs(i,0); }*/ int ans=0; //for(int i=1;i<=n;++i) if (dep[i]==d[r2]) ind[i]=1; for(int i=1;i<=n;++i) if (d[i]==d[r2]){ te=i; while (te){ if (ind[te]) break; ind[te]=1; te=las[te]; } } for(int i=1;i<=n;++i) if (ind[i]) ++ans; //return d[5]; return ans; } };