3.15 京东(C++AK)

数组价值

明显只和最大最小值有关,依次删除尝试获取答案。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        vector<int>a(n);
        for(int i=0;i<n;i++){
            cin>>a[i];
        }
        sort(a.begin(),a.end());
        int ans=min(a[a.size()-2]-a[0],a[a.size()-1]-a[1]);
        cout<<ans<<endl;
    }
}

小兴的涂色面积

简单模拟即可

#include<bits/stdc++.h>
using namespace  std;
const double pi=3.1415926;
int main(){
    double r;
    int n;
    cin>>r>>n;
    double ans=0;
    for(int i=0;i<n;i++){
        if(i%2){
            ans-=r*r*pi*3/4;
        }else{
            ans+=r*r*pi*3/4;
        }
        r/=2;
    }
    printf("%.6f\n",ans);
    return 0;    
}

快递

堆优化Dijkstra,只是起点变多,稍微修改即可。

#include<bits/stdc++.h>
#define int long long 
using namespace std;
signed main(){
    int n,m,k,q;
    cin>>n>>m>>k>>q;
    vector<pair<int,int>>a[n+100];
    vector<int>dp(n+1,LLONG_MAX);
    priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>p;
    for(int i=0;i<k;i++){
        int t;
        cin>>t;
        p.push({0,t});
        dp[t]=0;
    }
    for(int i=0;i<m;i++){
        int x,y,c;
        cin>>x>>y>>c;
        a[x].push_back({y,c});
        a[y].push_back({x,c});
    }
    vector<int>b(q);
    for(int i=0;i<q;i++)
        cin>>b[i];
    while(!p.empty()){
        pair<int,int> t=p.top();
        p.pop();
        if(t.first>dp[t.second])
            continue;
        dp[t.second]=t.first;
        for(int i=0;i<a[t.second].size();i++){
            int x=t.second,y=a[t.second][i].first,c=a[t.second][i].second;
            if(t.first+c<dp[y]){
                dp[y]=t.first+c;
                p.push({t.first+c,y});
            }
        }
    }
    for(auto t:b){
        cout<<dp[t]<<endl;
    }
    return 0;
}

全部评论
代码风格建议改一下,加一些必要的空格
点赞 回复 分享
发布于 04-07 03:57 陕西
奇怪,第二题只需要模拟就行吗?我想半天怎么构造公式解决精度问题
点赞 回复 分享
发布于 03-17 16:38 湖北

相关推荐

评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务