腾讯音乐笔试4.18

  • 按照题意模拟即可,每两项插入0,特判null节点
   ListNode* insert0(ListNode* head) {
        ListNode* ret=head;
        while(head){
            ListNode* nxt=head->next;
            ListNode* p=new ListNode(0);
            if(nxt!=nullptr){
                head->next=p;
                p->next=nxt;
            }
            head=nxt;
        }

        return ret;
    }
  • 构造,可以知道最后一层节点有 \frac{2}{n-1},则根节点权值给\frac{2}{n-1} 往下递归时,子节点值为根节点/2即可
  void dfs(int d,TreeNode* cur,int n){
        if(d==n) return;
        cur->left=new TreeNode((cur->val)/2);
        cur->right=new TreeNode((cur->val)/2);
        dfs(d+1,cur->left,n);
        dfs(d+1,cur->right,n);
     }
    TreeNode* create(int n) {
        TreeNode* root=new TreeNode(1<<(n-1));
        dfs(1,root,n);

        return root;
    }

  • 先算出R的所有和,若为奇数,则需要在没染色的奇数格子里选奇数个方块,假设有odd个,方案数有C(odd,1)+C(odd,3)+...,偶数格子里任选,每个格子选和不选两种情况,方案数为qmi(2,even),两者相乘即可,若为偶数,则奇数方案数为C(odd,0)+C(odd,2)+...,偶数任选,两者相乘
 typedef long long ll;
     const ll N=2e5+10;
     ll a[200005],cnt=0,mod=1e9+7;
     ll fact[200005],inv[200005];
    int getMethod(ListNode* head, string colors) {
        // write code here
        ListNode* cur=head;
        while(cur){
            a[cnt++]=cur->val;
            cur=cur->next;
        }
        fact[0]=inv[0]=1;
        for(ll i=1;i<=cnt;i++){
            fact[i]=fact[i-1]*i%mod;
            inv[i]=qmi(fact[i],mod-2,mod)%mod;
        }
        ll s=0,odd=0,even=0;
        for(ll i=0;i<cnt;i++){
            if(colors[i]=='R') s+=a[i];
            else{
                odd+=(a[i]&1);
                even+=(a[i]%2==0);
            }
        }
       // cout<<s<<" "<<odd<<" "<<even<<endl;
        if(s&1){
            if(odd){
                ll ans=1,res=0;
                for(int i=1;i<=odd;i+=2){
                    res=(res+C(odd,i))%mod;
                }
                ans=res*qmi(2,even,mod)%mod;
                return ans;
            }
            else return 0;
        }else{
            cout<<s<<" "<<odd<<" "<<even<<endl;
            ll ans=1;
            ll res=0;
            for(int i=0;i<=odd;i+=2){
                res=(res+C(odd,i))%mod;
            }
            ans=res*qmi(2,even,mod)%mod;
            cout<<ans<<endl;
            return ans;
        }
    }
    ll C(ll x,ll y){
        return (((fact[x]*inv[y])%mod)*inv[x-y])%mod;
    }
    ll qmi(ll x,ll y,ll mod){
        ll res=1;
        while(y){
            if(y&1) res=res*x%mod;
            y>>=1;
            x=x*x%mod;
        }
        return res;
    }

  • 二分答案最后的最小连续1长度x是多少,问题转化为把一段连续1,转化成1连续长度不超过x,那么假设这段1长度为len,每x+1个1,就需要变1个0,分隔开他们,所以贡献值是len/(x+1),累加所有的len长度,判断贡献值和sum是否<=题目给出的最大操作数k即可
bool check(string& s,int x,int k){
        int res=0;
        for(int i=0;i<s.size();i++){
            int j=i;
            if(s[i]=='1'){
                int j=i;
                while(j+1<s.size()&&s[j+1]=='1'){
                    j++;
                }
                int len=j-i+1;
                if(len>x){
                    res+=len/(x+1);
                }
                i=j;
            }
        }
        cout<<x<<" "<<res<<" "<<k<<endl;
        return res<=k;
    }
    int maxLen(string s, int k) {
        // write code here
        int l=0,r=s.size();
        while(l<r){
            int mid=l+r>>1;
            if(check(s,mid,k)) r=mid;
            else l=mid+1;
        }

        return l;
    }

全部评论
大佬太强了
1 回复 分享
发布于 2024-04-19 15:37 广东
兄弟是算法大佬啊,没必要焦虑😅
1 回复 分享
发布于 2024-04-18 22:13 广东

相关推荐

01-07 11:46
Java
如图:也是让我遇到逆天公司了,实习生是按天给工资,不忙直接强制休假了
baskly:公司为北京超图软件股份有限公司武汉分公司,明年公司应该会招新实习生,刷到的小伙伴快跑
点赞 评论 收藏
分享
头像
2025-12-02 21:34
中南大学 Java
我这边应该算是华为第一批开奖的了,还是要11月底才开,不过今年的流程整体比去年确实要开得早,这一点还是值得表扬的。然后华为也确实很有诚意,给我这样bg的硕鼠开了15a,并且base地还是在杭州,应该是buff拉满了,但凡其他公司开的没这个高,and对象没签上海,可能真选择成为华孝子了。虽然很有诱惑力,但是这个15a的offer里面确实还是有猫腻的:1.&nbsp;薪资构成是这样的,15a&nbsp;=&nbsp;(基本工资+绩效工资)*12&nbsp;+&nbsp;10w年终,虽然绩效工资hr说100%能拿满,年终大部分都能拿满,绩效工资能拿满我可能还选择相信,但10w年终还能拿满,这我就存疑了。反正看了一圈别家的公司报价都是报一般情况下能拿多少年终,比如美团0-6个月,就报3.5个月,但是华似乎是喜欢往最高了报,所以估计10w年终拿满应该也是极少数人。2.&nbsp;公积金只交5%,并且缴纳基数还只是按基本工资交的,这里看似每个月到手的钱变多了,但是总体算下来,可能一年比别家就少拿1-2w。3.&nbsp;月末周六要加班,可以选择调休或双倍加班费,并且平常应该也会加班,感觉不大会像hr说的124能8.30下班,35能5.30下班的,云计算bu强度应该还算比较好的,估计一般情况下9-9-5吧,但是不知道并入ict后会如何。4.&nbsp;还有相关的业务线,听说8,9月份云计算bu内部已经调整了一波,好像还要并入ict下面了,感觉未来的不确定性也比较大。5.&nbsp;华为的认可度应该比不过传统的互联网大厂,技术的前瞻性应该也比不过(个人看法)。6.&nbsp;培养和升职,感觉美团可能更有说法,毕竟见到过1年升L6的,甚至还有两年升L7的,对华为的了解相对较少,只知道华为可能相对稳定一些?毕竟4年一签?综上,还是决定放弃华,准备去团吧,自己选的路,希望不会后悔吧。
变形钢筋:这个薪资结构,年终奖是画大饼啊
OC/开奖
点赞 评论 收藏
分享
评论
9
16
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务