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; }