滴滴 9.17笔试 凉经

第一题:
一个标书证书的字符串,其中有几位是问号,知道这个数字满足
1,可被3整除;2,相邻数字不同;3,首位不为0
问这个数字最小是多少
直接贪心+回溯 ac
bool f(string& str, int index, int pre){
    if(index==str.size()){
        return pre==0;
    }
    if(str[index]=='?'){
        char before=(index==0)?'0':str[index-1];
        char after=(index+1==str.size())?'*':str[index+1];
        for(int i=0;i<9;i++){
            char c='0'+i;
            if(c!=before && c!=after){
                str[index]=c;
                int left=(pre*10+i)%3;
                if(f(str,index+1,left)) return true;
                //str[index]='?';
            }
        }
        str[index]='?';
    }else{
            int left=(pre*10+str[index]-'0')%3;
            return f(str, index+1,left);
    }
    return false;
}

int main(){
    string str;
    cin>>str;
    f(str, 0, 0);
    cout<<str<<endl;
    return 0;
}

第二题:
n个栅栏,每个栅栏被涂上两种漆,每次在【l,r】区间上(左闭右闭)涂一种漆,当第一种漆涂至少p次,第二种漆涂之撒后q次时这个栅栏才是正常。问给定一系列区间,有多少个栅栏是正常的。
经典的排序+贪婪。但是问题是要考虑端点,因为全是比区间,我就是栽在这上面了。。。。后来刚改完就交卷了,服了
int main(){
    int n,p,q;
    cin>>n>>p>>q;
    vector<vector<int>> points(2*n, vector<int>(3,0));//[index, type, add/delete]
    for(int i=0;i<n;i++) {
        cin>>points[i][0];
        points[i][2]=1;
    }
    for(int i=n;i<2*n;i++) {
        cin>>points[i][0];
        points[i][2]=-1;
    }
    for(int i=0;i<n;i++){
        int type;
        cin>>type;
        points[i][1]=type;
        points[i+n][1]=type;
    }
    //for(auto& v:points) cout<<v[0]<<", "<<v[1]<<", "<<v[2]<<endl;
    sort(points.begin(), points.end());
    //cout<<"====="<<endl;
    //for(auto& v:points) cout<<v[0]<<", "<<v[1]<<", "<<v[2]<<endl;
    int type1=0,type2=0;
    int pre=points[0][0];
    if(points[0][1]==1){
        type1=points[0][2];
    }else{
        type2=points[0][2];
    }
    int result=0;
    for(int i=1;i<points.size();){
        cout<<i<<endl;
        int index=points[i][0],type=points[i][1];
        int type1_add=0,type1_minux=0,type2_add=0,type2_minux=0;
        if(type1>=p && type2>=q){
            result+=index-pre;
        }
        cout<<index<<type1<<", "<<type2<<endl;
        while(i<points.size() && points[i][0]==index){
            if(points[i][1]==1){
                if(points[i][2]>0){
                    type1_add++;
                }else{
                    type1_minux++;
                }

            }else{
                if(points[i][2]>0){
                    type2_add++;
                }else{
                    type2_minux++;
                }
            }
            i++;
        }
        type1+=type1_add;
        type2+=type2_add;
        if(type1>=p && type2>=q) result++;
        
        type1-=type1_minux;
        type2-=type2_minux;
        pre=index+1;
    }
    cout<<result;
    return 0;
}
感觉出这种类型的题应该滴滴可能也不太想招人。但是我还是没ac。。最近一直是在上机的时候考虑问题不仔细,临要弄完了就才想明白。。。心态崩了


#滴滴笔试#
全部评论
不如试试小而美公司优***?全球领先的IoT行业数字化解决方案提供商,四大体系岗位,专业不限,流程高效,不泡池子不养鱼,投递链接http://campus.51job.com/urovo/ 内推码:LSWUZH
点赞 回复 分享
发布于 2022-09-18 21:11 广东
同学同花顺尝试一下吗,面试简单不造火箭,我帖子有内推
点赞 回复 分享
发布于 2022-09-18 01:14 浙江
为什么9不取等于?
点赞 回复 分享
发布于 2022-09-17 23:04 湖南

相关推荐

LuvSran:是人我吃。老师就是学校呆久了,就业方面啥都不懂,还自以为是为了我们就业好。我学校就一破双非,计科入行率10%都没有,某老师还天天点名,说是出勤率抬头率前排率高了,华为什么的大厂就会来,我们就是不好好上课才没有厂来招。太搞笑了
点赞 评论 收藏
分享
10-09 16:12
门头沟学院 Java
帅宇殿下:佬,简历写的什么
点赞 评论 收藏
分享
27届毕业,最近想找一段大厂实习,感觉简历有些问题,好多都不给面,求大佬们指点,最近好焦虑
后端劝退第91人:我从后端的角度分析一下你的第一个项目,我感觉亮点不是很突出。因为我是因为组内有需求,临时上手学react干活。我用到的技术基本就cover你那个智慧园区管理平台的很多亮点了。那作为比较专业的前端,你上述的内容是不是有点单薄呢。感觉还得包装
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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