co_fun 力扣算法集训基础题单 标程 4.3-4.4

说明:本文为co_fun算法集训活动参考答案,有兴趣参与co_fun算法集训的同学可以关注b站 “co_fun算法内推社区” 获得群号。co_fun算法集训活动,针对算法基础一般的同学,从常见考点开始训练,每日三道题,会有讲解。三个月攻坚大厂笔试面试算法题。

2022.4.3-1

#include<bits/stdc++.h>
#define int long long
#define MAXN 1000005
using namespace std;
int dp[1005][1005];
int a[1005][1005];
signed main()
{
    int n;cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            cin>>a[i][j];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
             dp[i][j]=max(dp[i-1][j],dp[i][j-1])+a[i][j];
    cout<<dp[n][n]<<endl;
}

2022.4.3-2

#include<bits/stdc++.h>
#define int long long
#define MAXN 1000005
using namespace std;
int pre[MAXN];
int get(int x)
{
    int flag=0;
    int m=x;
    while(m)
    {
        if(m%10==7)flag=1;
        m/=10;
    }
    if(flag||x%7==0)return 0;
    return x*x;
}
signed main()
{
    for(int i=1;i<=1000000;i++)
        pre[i]=get(i)+pre[i-1];
    int t;cin>>t;
    while(t--)
    {
        int x;cin>>x;
        cout<<pre[x]<<endl;
    }
}

2022.4.3-3

#include<bits/stdc++.h>
#define int long long
#define MAXN 1000005
using namespace std;
int dp[20005];
signed main()
{
    dp[0]=1;
    int v,n;cin>>v>>n;
    for(int i=1;i<=n;i++)
    {
        int t;cin>>t;
        for(int j=v;j>=t;j--)
            dp[j]|=dp[j-t];
    }
    for(int i=v;i>=0;i--)
    {
        if(dp[i])
        {
            cout<<v-i<<endl;
            return 0;
        }
    }
}

2022.4.4-1

#include<bits/stdc++.h>
#define int long long
#define MAXN 2005
using namespace std;
int n,h,r;
int x[MAXN],y[MAXN],z[MAXN];
int vis[MAXN];
bool check(int a,int b)
{
    return (x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b])+(z[a]-z[b])*(z[a]-z[b])
     <= 4*r*r;
}
void dfs(int now)
{
    if(vis[now])return;
    vis[now]=1;
    for(int i=1;i<=n;i++)
        if(check(now,i))
            dfs(i);
}
void solve()
{
    memset(vis,0,sizeof(vis));
    cin>>n>>h>>r;
    for(int i=1;i<=n;i++)
        cin>>x[i]>>y[i]>>z[i];
    for(int i=1;i<=n;i++)
        if(z[i]-r<=0)
            dfs(i);
    for(int i=1;i<=n;i++)
        if(vis[i]&&z[i]+r>=h)
    {
        cout<<"Yes"<<endl;
        return;
    }
    cout<<"No"<<endl;
}
signed main()
{
    int T;cin>>T;
    while(T--)
        solve();
}

2022.4.4-2

#include<bits/stdc++.h>
#define int long long
#define MAXN 2000005
using namespace std;
signed main()
{
    int n,m;cin>>n>>m;
    int minn=0,maxn=0;
    for(int i=1;i<=n;i++)
    {
        int t;cin>>t;
        maxn=max(maxn,max(t-0,m-t));
        minn=max(minn,min(t-0,m-t));
    }
    cout<<minn<<' '<<maxn<<endl;
}

2022.4.3-3

#include<bits/stdc++.h>
#define int long long
#define MAXN 200005
using namespace std;
struct P{
    int x,y,v;
    bool operator<(const P& a)const&{
        if(v==a.v)return x>a.x;
        return v>a.v;
    }
};
int g[MAXN],val[MAXN];
int l[MAXN],r[MAXN];
int del[MAXN];
priority_queue<P> pq;
vector<P> ans;
signed main()
{
    int n;cin>>n;
    for(int i=1;i<=n;i++)
    {
        char c;cin>>c;
        if(c=='B')g[i]=1;
        cin>>val[i];
        if(i!=1)l[i]=i-1;
        if(i!=n)r[i]=i+1;
    }
    for(int i=1;i<=n-1;i++)
        if(g[i]+g[i+1]==1)
            pq.push(P{i,i+1,abs(val[i]-val[i+1])});
    while(pq.size())
    {
        P now=pq.top();
        pq.pop();
        if(del[now.x]||del[now.y])
            continue;
        del[now.x]=del[now.y]=1;
        ans.push_back(now);
        int ll=l[now.x],rr=r[now.y];
        if(ll&&rr)
        {
            r[ll]=rr;
            l[rr]=ll;
            if(g[ll]+g[rr]==1)
                pq.push(P{ll,rr,abs(val[ll]-val[rr])});
        }
    }
    cout<<ans.size()<<endl;
    for(int i=0;i<ans.size();i++)
        cout<<ans[i].x<<' '<<ans[i].y<<endl;
}

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值