10月20号字节跳动第二批笔试求教

总共四道题
第一道题是输入一个数字n和数字m,接下来一行是n个数代表每个阵营的人数,再下一行是m个联盟关系,比如1,2或者2,3,如果那么1和3也是联盟,求人数最多的联盟的人数。这道题怎么做啊???
第二道是一个正向三角形经过分裂可以分割为3个正向和1个负向三角形,一个负向三角形可以分割为3个负向和1个正向三角形,求1个正向三角形经过n次分裂的最小正向三角形个数。这道题怎么做啊?为什么总是百分之10。下面附我的代码,求教
第三题艰难的百分之百
第四道题没时间做了,有牛友参加昨天的笔试记得题目吗??求教求代码。。。。。

第二题
#include <iostream> using namespace std; class Solution{ public: int getNum(int n){ //        if(n==1){ //            return 3; //        }  int res[n+1]; int fu[n+1];
        res[0]=1;
        fu[0]=0;
        res[1]=3;
        fu[1]=1; for (int i = 2; i <n+1 ; ++i) {
            res[i]=res[i-1]*3+fu[i-1];
            fu[i]=res[i-1]+fu[i-1]*3;
            cout<<res[i]<<" "<<fu[i]<<endl;
        } return res[n]%1000000007;
    }
}; int main(){ int n;
    cin>>n; Solution s;
    cout<<s.getNum(n); return 0;
}

#字节跳动##笔试题目#
全部评论
第一题是不是并查集就好了
点赞 回复
分享
发布于 2019-10-21 12:26
第二题不能用for循环,n的量级太大,得推到一个公式直接计算,公式是2^(n-1)*(2^n+1)
点赞 回复
分享
发布于 2019-10-21 13:00
小红书
校招火热招聘中
官网直投

相关推荐

点赞 4 评论
分享
牛客网
牛客企业服务