牛客练习赛61题解

题目链接

A.打怪

题意:





题解:



AC代码

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define endl '\n'
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
//const int mod=1e9+7;
const int mod=998244353;
const double eps = 1e-10;
const double pi=acos(-1.0);
const int maxn=3e6+10;
const ll inf=0x3f3f3f3f;
const int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};




int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    int t;
    cin>>t;
    while(t--){
        int h,a,H,A;
        cin>>h>>a>>H>>A;
        if(a>=H)cout<<-1;
        else {
            int k=(H-1)/a;
            int p=A*k;
            cout<<(h-1)/p;
        }
        cout<<endl;
    }


    return 0;
}

B.吃水果

题意:




题解:



AC代码

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define endl '\n'
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
//const int mod=1e9+7;
const int mod=998244353;
const double eps = 1e-10;
const double pi=acos(-1.0);
const int maxn=3e6+10;
const ll inf=0x3f3f3f3f;
const int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};




int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    int t;
    cin>>t;
    while(t--){
        int a,b;
        cin>>a>>b;
        int ans=0;
        if(a>b)swap(a,b);
        while(1){
            if(a==b){cout<<ans+a<<endl;break;}
            if(a*2<=b)a*=2,ans++;
            if(a*2>b)a--,b--,ans++;
        }
    }


    return 0;
}

C.四个选项

题意:



题解:




AC代码

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define endl '\n'
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
//const int mod=1e9+7;
const int mod=998244353;
const double eps = 1e-10;
const double pi=acos(-1.0);
const int maxn=3e6+10;
const ll inf=0x3f3f3f3f;
const int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};

vector<int> v;
int a,b,c,d,m,n;
int fa[20],cnt[20],ans;
int find(int x){
    if(fa[x]==x)return x;
    return fa[x]=find(fa[x]);
}
void dfs(int i,int xa,int xb,int xc,int xd){
    if(xa==a&&xb==b&&xc==c&&xd==d)ans++;
    if(i==n)return;
    if(xa+v[i]<=a)dfs(i+1,xa+v[i],xb,xc,xd);
    if(xb+v[i]<=b)dfs(i+1,xa,xb+v[i],xc,xd);
    if(xc+v[i]<=c)dfs(i+1,xa,xb,xc+v[i],xd);
    if(xd+v[i]<=d)dfs(i+1,xa,xb,xc,xd+v[i]);
}


int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);

    cin>>a>>b>>c>>d>>m;

    for(int i=1;i<=12;i++)fa[i]=i;
    for(int i=1;i<=m;i++){
        int x,y;
        cin>>x>>y;
        int p=find(x),q=find(y);
        fa[p]=q;
    }
    for(int i=1;i<=12;i++)cnt[find(i)]++;
    for(int i=1;i<=12;i++)
        if(cnt[i])v.pb(cnt[i]);
    n=v.size();
    dfs(0,0,0,0,0);
    cout<<ans;
    return 0;
}

D.最短路变短了

题意:



题解:





AC代码

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define endl '\n'
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
//const int mod=1e9+7;
const int mod=998244353;
const double eps = 1e-10;
const double pi=acos(-1.0);
const int maxn=1e5+10;
const ll inf=0x3f3f3f3f;
const int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};

struct edge{
    ll u,v,w;
}e[200010];
int n,m;
vector<pll> g1[maxn],g2[maxn];
ll d1[maxn],d2[maxn];
void dij(ll dis[],vector<pll> g[],int s){
    for(int i=1;i<=n;i++)dis[i]=inf*inf;
    dis[s]=0;
    priority_queue<pll,vector<pll>,greater<pll> > q;
    q.push(mp(0,s));
    while(!q.empty()){
        pll p=q.top();
        q.pop();
        int u=p.se;
        if(dis[u]<p.fi)continue;
        for(auto i:g[u]){
            int v=i.fi;
            ll w=i.se;
            if(dis[v]>dis[u]+w){
                dis[v]=dis[u]+w;
                q.push(mp(dis[v],v));
            }
        }
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        ll u,v,w;
        cin>>u>>v>>w;
        g1[u].pb(mp(v,w));
        g2[v].pb(mp(u,w));
        e[i]={u,v,w};
    }
    dij(d1,g1,1);dij(d2,g2,n);
    int q;cin>>q;
    while(q--){
        ll x;
        cin>>x;
        if(d1[e[x].v]+d2[e[x].u]+e[x].w<d1[n])cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}
全部评论

相关推荐

昨天 22:46
门头沟学院 Java
点赞 评论 收藏
分享
最近群里有很多同学找我看简历,问问题,主要就是集中在明年三月份的暑期,我暑期还能进大厂嘛?我接下来该怎么做?对于我来说,我对于双非找实习的一个暴论就是title永远大于业务,你在大厂随随便便做点慢SQL治理加个索引,可能就能影响几千人,在小厂你从零到一搭建的系统可能只有几十个人在使用,量级是不一样的。对双非来说,最难的就是约面,怎么才能被大厂约面试?首先这需要一点运气,另外你也需要好的实习带给你的背书。有很多双非的同学在一些外包小厂待了四五个月,这样的产出有什么用呢?工厂的可视化大屏业务很广泛?产出无疑是重要的,但是得当你的实习公司到了一定的档次之后,比如你想走后端,那么中厂后端和大厂测开的选择,你可以选择中厂后端(注意,这里的中厂也得是一些人都知道的,比如哈啰,得物,b站之类,不是说人数超过500就叫中厂),只有这个时候你再去好好关注你的产出,要不就无脑大厂就完了。很多双非同学的误区就在这里,找到一份实习之后,就认为自己达到了阶段性的任务,根本不再投递简历,也不再提升自己,玩了几个月之后,美其名曰沉淀产出,真正的好产出能有多少呢?而实际上双非同学的第一份实习大部分都是工厂外包和政府外包!根本无产出可写😡😡😡!到了最后才发现晚了,所以对双非同学来说,不要放过任何一个从小到中,从中到大的机会,你得先有好的平台与title之后再考虑你的产出!因为那样你才将将能过了HR初筛!我认识一个双非同学,从浪潮到海康,每一段都呆不久,因为他在不断的投递和提升自己,最后去了美团,这才是双非应该做的,而我相信大部分的双非同学,在找到浪潮的那一刻就再也不会看八股,写算法,也不会打开ssob了,这才是你跟别人的差距。
迷茫的大四🐶:我也这样认为,title永远第一,只有名气大,才有人愿意了解你的简历
双非本科求职如何逆袭
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

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