拼多多笔试代码 2023.10.08

第一题

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#define ll long long
using namespace std;
const int N = 1e5+5;
int k[N],l[N];
int main(){
    int n;cin>>n;
    for(int i=0;i<n;i++)cin>>k[i];
    for(int i=0;i<n;i++)cin>>l[i];
    sort(k,k+n);
    sort(l,l+n);
    int le,ri;
    le=ri=0;
    int ans=0;
    while(le<n&&ri<n){
        if(k[le]>l[ri]){
            le++;
            ri++;
            ans++;
        }else{
            le++;
        }
    }
    cout<<ans<<endl;
}

第二题

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#define ll long long
using namespace std;
const int N = 1005;
ll w[N],sum[N];
int main(){
    // cout<<256.0/(988+100+132)<<endl;
    int t;cin>>t;
    while(t--){
        memset(w,0,sizeof(w));
        memset(sum,0,sizeof(sum));
        int n,k;cin>>n>>k;
        double use_temp=k*0.01;
        for(int i=0;i<n;i++){
            cin>>w[i];
            if(i==0)sum[i]=w[i];
            else sum[i]=sum[i-1]+w[i];
        }
        ll ans=0;
        for(int i=1;i<n;i++){
            sum[i-1]+=ans;
            double temp=w[i]*1.0/(sum[i-1]*1.0);
            // cout<<temp<<endl;
            if(temp<use_temp){
                continue;
            }else{
                double kk=(w[i]*1.0)/use_temp;
                int x=kk;
                double y=kk-x;
                if(y>0){
                    x++;
                }
                ans+=(x-sum[i-1]);
            }
        }
        cout<<ans<<endl;
    }
}

第三题

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <string>
#include <queue>
#define ll long long
using namespace std;
queue<string>q,q2,q3,q4,q5,q6;
int main(){
    int t;cin>>t;
    while(t--){
        int m;
        string s;
        ll ans=0;
        cin>>m>>s;
        while(!q.empty())q.pop();
        while(!q2.empty())q2.pop();
        while(!q3.empty())q3.pop();
        while(!q4.empty())q4.pop();
        while(!q5.empty())q5.pop();
        while(!q6.empty())q6.pop();
        q.push(s);
        while(!q.empty()){
            string temp=q.front();q.pop();
            string son="";
            for(int i=0;i<temp.length();){
                if(i+2<temp.length()){
                    if(temp[i]=='P'&&temp[i+1]=='D'&&temp[i+2]=='D'){
                        ans++;
                        if(son!=""){
                            q2.push(son);
                        }
                        son="";
                        i+=3;
                    }else{
                        son+=temp[i];
                        i++;
                    }
                }else{
                    son+=temp[i];
                    i++;
                }
            }
            if(son!=""){
                q2.push(son);
            }
        }


        // while(!q2.empty()){
        //     if(m<=0)break;
        //     string temp=q2.front();q2.pop();
        //     string son="";
        //     for(int i=0;i<temp.length();){
        //         if(i+2<temp.length()){
        //             if(temp[i]=='P'&&temp[i+2]=='D'){
        //                 if(m<=0)break;
        //                 else{
        //                     ans++;
        //                     m--;
        //                 }
        //                 if(son!=""){
        //                     q3.push(son);
        //                 }
        //                 son="";
        //                 i+=3;
        //             }else{
        //                 son+=temp[i];
        //                 i++;
        //             }
        //         }else{
        //             son+=temp[i];
        //             i++;
        //         }
        //     }
        //     if(son!=""){
        //         q3.push(son);
        //     }
        // }

        while(!q2.empty()){
            if(m<=0)break;
            string temp=q2.front();q2.pop();
            string son="";
            for(int i=0;i<temp.length();){
                if(i+1<temp.length()){
                    if((temp[i]=='P'&&temp[i+1]=='D')||(temp[i]=='D'&&temp[i+1]=='D')){
                        if(m<=0)break;
                        else{
                            ans++;
                            m--;
                        }
                        if(son!=""){
                            q4.push(son);
                        }
                        son="";
                        i+=2;
                    }else{
                        son+=temp[i];
                        i++;
                    }
                }else{
                    son+=temp[i];
                    i++;
                }
            }
            if(son!=""){
                q4.push(son);
            }
        }

        while(!q4.empty()){
            if(m<=1)break;
            string temp=q4.front();q4.pop();
            string son="";
            for(int i=0;i<temp.length();){
                if(temp[i]=='P'||temp[i]=='D'){
                    if(m<=1)break;
                    else{
                        ans++;
                        m-=2;
                    }
                    if(son!=""){
                        q5.push(son);
                    }
                    son="";
                    i++;
                }else{
                    son+=temp[i];
                    i++;
                }
            }
            if(son!=""){
                q5.push(son);
            }
        }
        ans+=(m/3);
        cout<<ans<<endl;
    }
}

第四题

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <string>
#include <queue>
#define ll long long
using namespace std;
const int N = 1e5+5;
ll k[N];
ll val[N];
ll sum;
ll n,t;
void dfs(int pos,ll weigh,int step){
    val[pos]=min(val[pos],weigh);
    for(int i=0;i<=step;i++){
        if(k[1+i+pos]+val[pos]>t)continue;
        if(1+i+pos>n)continue;
        if(k[1+i+pos]+val[pos]<val[1+i+pos])
        dfs(1+i+pos,k[1+i+pos]+val[pos],step);
    }
}
ll solve(int step){
    for(int i=0;i<=step;i++){
        // cout<<1+i<<' '<<k[1+i]<<' '<<step<<endl;
        if(k[1+i]>t)continue;
        if(1+i>n)continue;
        dfs(1+i,k[1+i],step);
    }
    ll target_val=sum+1;
    // cout<<step<<' ';
    for(int i=n;i>=n-step;i--){
        // cout<<val[i]<<' ';
        target_val=min(target_val,val[i]);
    }
    // cout<<endl;
    // cout<<"adsa "<<step<<' '<<target_val<<endl;
    return target_val;
}
int erfen(int le,int ri){
    int mid=(le+ri)>>1;
    while(le<ri){
        for(int i=0;i<=n;i++){
            val[i]=sum+1;
        }
        // cout<<mid<<endl;
        // cout<<solve(mid)<<' ';
        if(solve(mid)<=t){
            ri=mid;
        }else{
            le=mid+1;
        }
        // cout<<le<<' '<<ri<<endl;
        mid=(le+ri)>>1;
    }
    if(solve(mid)>t){
        le=le-1;
    }
    return le;
}
int main(){
    int T;cin>>T;
    while(T--){
        memset(k,0,sizeof(k));
        cin>>n>>t;
        sum=0;
        for(int i=1;i<=n;i++){
            cin>>k[i];
            sum+=k[i];
        }
        if(sum<=t){
            cout<<0<<endl;
        }else{
            int ans=erfen(1,n);
            cout<<ans<<endl;
        }
    }
}

全部评论
能说一下题目吗?
点赞 回复 分享
发布于 2023-10-08 18:26 湖北
第四题dfs 能过完吗?我只过了一半
点赞 回复 分享
发布于 2023-10-08 18:31 四川
jw还不收手?
点赞 回复 分享
发布于 2023-10-09 16:57 江苏

相关推荐

10-13 17:47
门头沟学院 Java
wulala.god:图一那个善我面过,老板网上找的题库面的
点赞 评论 收藏
分享
诨号无敌鸭:恭喜佬,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
1 2 评论
分享
牛客网
牛客企业服务