滴滴9.17笔试

第一题,寻找第一个满足解即可
#include<bits/stdc++.h>
using namespace std;
// 3整除,全部加起来能够整除3
string res;
bool flag = false;
bool check(string str) {
    int cnt = 0;
    for (char c : str) {
        cnt += (c - '0');
    }
    if (cnt % 3 == 0) {
        return true;
    }
    return false;
}
void dfs(string &s, int k) {
//    cout<<s<<endl;
    if (flag) {
        return;
    }
    if (k >= s.length()) {
//        cout<<s<<endl;
        if (check(s)) {
            res = s;
            flag = true;
        }
        return;
    }
//    for (int j = k; j < s.length(); ++j) {
//
//    }
    int j = k;
    if (s[j] != '?') {
        dfs(s, k + 1);
    } else {
        if (j == 0) {
            if (s.length() == 1) {
                for (int i = 1; i <= 9; ++i) {
                    s[j] = '0' + i;
                    dfs(s, k + 1);
                    s[j] = '?';
                }
            } else {
                for (int i = 1; i <= 9; ++i) {
                    if (s[j + 1] == '0' + i) {
                        continue;
                    }
                    s[j] = '0' + i;
                    dfs(s, k + 1);
                    s[j] = '?';
                }
            }
        } else {
            for (int i = 0; i <= 9; ++i) {
                if (s[j - 1] == '0' + i) {
                    continue;
                }
                if (j != s.length() - 1 && s[j + 1] == '0' + i) {
                    continue;
                }
                s[j] = '0' + i;
                dfs(s, k + 1);
                s[j] = '?';
            }
        }
    }

}
int main () {
    string str;
    cin>>str;
    dfs(str, 0);
    cout<<res<<endl;
    return 0;
}
第二题,用了两个差分数组,只过了91,有大佬帮忙看看么
// 维护两个差分数组即可!!
#include<bits/stdc++.h>
using namespace std;
long long MAX_NUM = 0;

int main () {
    long long n, p, q;
    cin>>n>>p>>q;
//    cout<<n<<" "<<p<<" "<<q<<endl;
    vector<long long> l(n, 0);
    vector<long long> r(n, 0);
    vector<long long> t(n, 0);
    // int l, r, t;
    for (long long i = 0; i < n; ++i) {
        cin>>l[i];
        MAX_NUM = max(MAX_NUM, r[i]);
    }
    for (long long i = 0; i < n; ++i) {
        cin>>r[i];
        MAX_NUM = max(MAX_NUM, r[i]);
    }
    for (long long i = 0; i < n; ++i) {
        cin>>t[i];
    }
    MAX_NUM += 5;
//    cout<<"over"<<endl;
    vector<long long>cf1(MAX_NUM, 0);
    vector<long long>cf2(MAX_NUM, 0);

    for (long long i = 0; i < n; ++i) {
        if (t[i] == 1) {
            cf1[l[i]]++;
            cf1[r[i] + 1]--;
        } else {
            cf2[l[i]]++;
            cf2[r[i] + 1]--;
        }
    }
    long long sum1 = 0;
    long long sum2 = 0;
    long long res = 0;
    for (long long i = 1; i < MAX_NUM; ++i) {
        sum1 += cf1[i];
        sum2 += cf2[i];
        if (sum1 >= p && sum2 >= q) {
            res++;
        }
    }
    cout<<res<<endl;
    return 0;
}



#滴滴笔试##笔试#
全部评论
hxd你第一题过了所有点吗
点赞 回复 分享
发布于 2022-09-17 16:47 浙江
第二题离散化加前缀和 过100,但是我第一题没来得及写,
点赞 回复 分享
发布于 2022-09-17 16:49 江苏
干,第二题用了int只过了18
点赞 回复 分享
发布于 2022-09-17 16:50 广东
第一题可以遍历贪心,留最后一个问号凑整除就行了
点赞 回复 分享
发布于 2022-09-17 16:50 广东
MAX_NUM有可能很大,OOM了,应该用map,插入只出现过的数字
点赞 回复 分享
发布于 2022-09-17 18:43 广东

相关推荐

小红书 后端选手 n*16*1.18+签字费期权
点赞 评论 收藏
分享
评论
2
2
分享
牛客网
牛客企业服务