8.23 字节笔试

居然不让切本地IDE,后面有时间补下代码

1.  数组和模3为0的个数
DP,dp[i][j]表示i个数,和模3为j的方案数。AC
#include <bits/stdc++.h>
using namespace std;
int n, l, r;
long long dp[500005][3];

int main()
{
    int mod = 1000000007;
    scanf("%d %d %d", &n, &l, &r);
    dp[0][0] = 1LL;
    for(int i = 1 ; i <= n ; i++){
        int a[3];
        for(int j = 0 ; j < 3 ; j++){
            int p = r/3 + (r%3>=j);
            int q = (l-1)/3 + ((l-1)%3>=j);
            a[j] = p - q;
        }
        dp[i][0] = dp[i-1][0]*a[0] + dp[i-1][1]*a[2] + dp[i-1][2]*a[1];
        dp[i][1] = dp[i-1][0]*a[1] + dp[i-1][1]*a[0] + dp[i-1][2]*a[2];
        dp[i][2] = dp[i-1][0]*a[2] + dp[i-1][1]*a[1] + dp[i-1][2]*a[0];
        for(int j = 0 ; j < 3 ; j++)
            dp[i][j] %= mod;
    }
    printf("%lld\n", dp[n][0]);
    return 0;
}


2.
dfs骗分,20%
骗分代码就不写了😂

3.
暴力骗分,30%

4. 问建图后是否为联通且无环。
n<10000暴力,n>10000不会,直接输出NO,居然过了...
#include <bits/stdc++.h>
using namespace std;
bool f(int a, int b, int c, int d){
    if(a<=c && b>=d)
        return false;
    if(c<=a && d>=b)
        return false;
    if(b<c || a>d)
        return false;
    return true;
}
int main()
{
    int T, n;
    scanf("%d", &T);
    while(T--){
        scanf("%d", &n);
        vector<int> p(n, 0);
        vector<int> q(n, 0);
        for(int i = 0 ; i < n ; i++)
            scanf("%d %d", &p[i], &q[i]);
        if(n > 10000){ //不加能过60%,会超时。
                //   堵出题人样例是机器随机生成,大概率不满足。
            printf("NO\n");
            continue;
        }
        vector<int> g[n];
        int sum = 0; //统计边数
        for(int i = 0 ; i < n ; i++){
            for(int j = 0 ; j < i ; j++){
                if(f(p[i], q[i], p[j], q[j])){
                    g[i].push_back(j); //建无向图
                    g[j].push_back(i);
                    sum++;
                }
            }
        }
        vector<bool> vis(n, 0);
        queue<int> que;
        que.push(0);
        vis[0] = true;
        while(!que.empty()){
            int t = que.front();
            que.pop();
            for(int i = 0; i < g[t].size(); i++){
                if(vis[g[t][i]]) continue;
                vis[g[t][i]] = true;
                que.push(g[t][i]);
            }
        }
        bool flag = true; //判断是否连通
        for(int i = 0 ; i < n ; i++)
            if(vis[i] == false)
            flag = false;
        if(sum == n-1 && flag)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}


#笔试题目##字节跳动#
全部评论
你好,可以说一下你第一题dp的方程嘛,我用了dp,就过了17
点赞 回复 分享
发布于 2020-08-23 12:12
等一波代码,m
点赞 回复 分享
发布于 2020-08-23 12:12
大佬nb!
点赞 回复 分享
发布于 2020-08-23 12:14
强无敌
点赞 回复 分享
发布于 2020-08-23 12:16
Mark
点赞 回复 分享
发布于 2020-08-23 12:16
很强!
点赞 回复 分享
发布于 2020-08-23 12:16
**?。。。。求代码。
点赞 回复 分享
发布于 2020-08-23 12:20
第三道我也骗分30
点赞 回复 分享
发布于 2020-08-23 12:22
很强 等代码
点赞 回复 分享
发布于 2020-08-23 12:22
m
点赞 回复 分享
发布于 2020-08-23 12:24
m
点赞 回复 分享
发布于 2020-08-23 12:25
我死磕第二题一个半小时,做出来了也没时间了,关键是最后两道题我题目都没看懂,遇到图的题完全没办法🤣
点赞 回复 分享
发布于 2020-08-23 12:28
mark
点赞 回复 分享
发布于 2020-08-23 13:11
等代码!
点赞 回复 分享
发布于 2020-08-23 13:43
最后一题我用的并查集,过了70%
点赞 回复 分享
发布于 2020-08-23 13:44
第一第四题代码已更新,二三题骗分代码就不写了😂
点赞 回复 分享
发布于 2020-08-23 13:50
大神可以讲讲第一题思路吗
点赞 回复 分享
发布于 2020-08-23 13:53
大佬第二题有思路吗,怎么不超时
点赞 回复 分享
发布于 2020-08-23 16:16
大佬,第四题你这里无环是怎么判断的,还有 if(sum == n-1 && flag)             printf("YES\n"); else             printf("NO\n"); 这里面的sum==n-1是判断什么的
点赞 回复 分享
发布于 2020-08-24 11:12
大佬,可以求一下题目么?标题里的链接失效了。
点赞 回复 分享
发布于 2020-08-25 10:00

相关推荐

挣K存W养DOG:我记得好多人说这个公司就是白嫖方案的,现在有大体方案要让你给他展示实现细节了,也是无敌了
点赞 评论 收藏
分享
永不遗忘:才这么点算什么拉黑,我初筛连着挂几十次了,最后还是能进面
点赞 评论 收藏
分享
03-15 20:26
已编辑
电子科技大学 C++
T3题面:给一个3e5数组,每次询问长度为len的子数组乘积的和,如果子数组乘积&gt;1e9,则视为0.赛后一分钟想出来了,比赛时打了个暴力+线段树注意到1e9大约是2^30,&nbsp;因此len长度如果&gt;30就直接输出0,30以内做一个记忆化就行,复杂度O(30*n)感觉是以前比赛做过的题,忘了怎么做了。。。---upd:&nbsp;忘了数据范围了,如果有0,1的话那这样也不行
blueswiller:给出一个做法,刚刚才想到,应该没问题,时间复杂度为 O(max(30n, nlogn)): 1. 根据 0 切分数组。2. 现在问题转化为>=1 的情况,我们首先维护每一个数前一个 > 1 的数的位置,同时维护一个长度的差分数组,初始值全为 0。3. 我们从每一个数 i 开始向前跳,至多跳 30 次,维护这个过程中的乘积,于是得到 30 个区间加和。举例:假设从 j1 跳到 j2 ,相当于对查询长度 (i- j1 + 1) 至 (i - j2) 贡献 a_i * ... * a_j1。4. 对于所有区间加和,我们采用差分数组结合树状数组对其进行维护,由于长度至多为 n ,树状数组构建的复杂度为 O(nlogn),于是,构建阶段的复杂度为 O(max(30n, nlogn))。在线单次查询的复杂度为树状数组查询的复杂度 O(logn)。
投递淘天集团等公司10个岗位 > 笔试
点赞 评论 收藏
分享
评论
5
14
分享

创作者周榜

更多
牛客网
牛客企业服务