首页 > 牛客编程巅峰赛S2赛季第5场代码
头像
褪色的夜
编辑于 2020-12-01 21:54
+ 关注

牛客编程巅峰赛S2赛季第5场代码

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回符合题意的最长的子串长度
     * @param x string字符串 
     * @return int整型
     */
    int Maximumlength(string x) {
        // write code here
        int ans=0,ln=-1,lp=-1,ly=-1,l=x.length(),te;
        for(int i = 0; i < l; ++i){
            if (x[i]=='n') ln=i;
            if (x[i]=='p') lp=i;
            if (x[i]=='y') ly=i;
            te=i-min(ln,min(lp,ly));
            if (te>ans) ans=te;
        }
        return ans;
    }
};

B   牛牛与后缀表达式
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 给定一个后缀表达式,返回它的结果
     * @param str string字符串 
     * @return long长整型
     */
    long long d[1100000];
    char c[1100000];
    int dt,ct;
    long long solve(string s) {
        // write code here
        int l=s.length();
        long long num=0;
        dt=ct=0;
        for(int i = 0; i < l; ++i){
            if (s[i]>='0'&&s[i]<='9'){
                num=num*10+(s[i]-'0');
                continue;
            }
            if (s[i]=='#'){
                d[++dt]=num;
                num=0;
                continue;
            }
            if (s[i]=='+'){
                d[dt-1]+=d[dt];
                --dt;
            }else if (s[i]=='-'){
                d[dt-1]-=d[dt];
                --dt;
            }else{
                d[dt-1]*=d[dt];
                --dt;
            }
        }
        return d[1];
    }
};
C   Tree III
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param e int整型vector 长度为n-1的数组,表示结点2到结点n的父结点
     * @return int整型
     */
    int n,ma,num,f[110000][2];
    vector<int> v[110000];
    void upd(int x){
        if (x>ma){
            ma=x;
            num=1;
        }else if (x==ma){
            num++;
        }
    }
    void dfs(int x,int fa){
        f[x][0]=0;f[x][1]=-n*2;
        for(int y:v[x]) if (y!=fa){
            dfs(y,x);
            int te=f[y][0]+1;
            if (te>f[x][0]){
                f[x][1]=f[x][0];
                f[x][0]=te;
            }else if (te>f[x][1])
                f[x][1]=te;
            te=f[y][1]+1;
            if (te>f[x][0]){
                f[x][1]=f[x][0];
                f[x][0]=te;
            }else if (te>f[x][1])
                f[x][1]=te;
        }
        upd(f[x][0]);
        upd(f[x][1]);
        int sm1=-1,sm2=-1;
        for(int y:v[x]) if (y!=fa){
            if (sm1==-1){
                sm1=f[y][0];
                sm2=f[y][1];
                continue;
            }
            upd(f[y][0]+sm1+2);
            upd(f[y][0]+sm2+2);
            upd(f[y][1]+sm1+2);
            upd(f[y][1]+sm2+2);
            if (f[y][0]>sm1){
                sm2=sm1;
                sm1=f[y][0];
            }else if (f[y][0]>sm2)
                sm2=f[y][0];
            if (f[y][1]>sm1){
                sm2=sm1;
                sm1=f[y][1];
            }else if (f[y][1]>sm2)
                sm2=f[y][1];           
        }
    }
    int tree3(vector<int>& e) {
        // write code here
        ma=0;num=1;
        n=e.size()+1;
        for(int i=1;i<=n;++i) v[i].clear();
        for(int i=2;i<=n;++i){
            v[e[i-2]].push_back(i);
        }
        dfs(1,0);
        if (num==1) return ma-1;else return ma;
    }
};



全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期精华帖

热门推荐