首页 > 其他 > 详细

2019SWERC题解

时间:2020-10-14 22:57:55      阅读:49      评论:0      收藏:0      [点我收藏+]

A题 带限制的最短路

技术分享图片
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int N=2e5+10;
int h[N],ne[N],e[N],d[N],w[N],idx;
void add(int a,int b,int c,int dd){
    e[idx]=b,ne[idx]=h[a],d[idx]=c,w[idx]=dd,h[a]=idx++;
}
int sx,sy,ex,ey;
int B,n;
int f[N];
int x[N],y[N];
vector<pll> num[N];
int st[N][110];
struct node{
    int id,dis,cost;
    bool operator <(const node &t) const{
        return cost>t.cost;
    }
};
map<int,pll> m1;
int cnt;
int dist[N][110];
int cal(pll a,pll b){
    int d1=a.first-b.first;
    int d2=a.second-b.second;
    return ceil(sqrt(d1*d1+d2*d2));
}
int dij(){
    int ans=0x3f3f3f3f;
    memset(dist,0x3f,sizeof dist);
    priority_queue<node> q;
    q.push({1,0,0});
    dist[1][0]=0;
    while(q.size()){
        auto t=q.top();
        q.pop();
        if(t.dis>B)
            continue;
        if(st[t.id][t.dis])
            continue;
        st[t.id][t.dis]=1;
        if(t.id==n+2){
            ans=min(ans,t.cost);
            continue;
        }
        for(int i=h[t.id];i!=-1;i=ne[i]){
            int j=e[i];
            if(t.dis+d[i]>B)
                continue;
            if(dist[j][t.dis+d[i]]>dist[t.id][t.dis]+w[i]){
                dist[j][t.dis+d[i]]=dist[t.id][t.dis]+w[i];
                q.push({j,t.dis+d[i],dist[j][t.dis+d[i]]});
            }
        }
    }
    if(ans==0x3f3f3f3f){
        return -1;
    }
    return ans;
}
int main(){
    ios::sync_with_stdio(false);
    memset(h,-1,sizeof h);
    cin>>sx>>sy>>ex>>ey;
    cin>>B;
    cin>>f[0];
    int t;
    cin>>t;
    int i;
    for(int i=1;i<=t;i++){
        cin>>f[i];
    }
    cin>>n;
    for(i=1;i<=n;i++){
        int l;
        cin>>x[i]>>y[i];
        cin>>l;
        for(int j=1;j<=l;j++){
            int a,b;
            cin>>a>>b;
            a++;
            num[i].push_back({a,b});
        }
    }
    add(1,n+2,cal({sx,sy},{ex,ey}),f[0]*cal({sx,sy},{ex,ey}));
    add(n+2,1,cal({sx,sy},{ex,ey}),f[0]*cal({sx,sy},{ex,ey}));
    for(i=1;i<=n;i++){
        add(1,i+1,cal({x[i],y[i]},{sx,sy}),f[0]*cal({x[i],y[i]},{sx,sy}));
        add(i+1,1,cal({x[i],y[i]},{sx,sy}),f[0]*cal({x[i],y[i]},{sx,sy}));
        add(n+2,i+1,cal({x[i],y[i]},{ex,ey}),f[0]*cal({x[i],y[i]},{ex,ey}));
        add(i+1,n+2,cal({x[i],y[i]},{ex,ey}),f[0]*cal({x[i],y[i]},{ex,ey}));
        for(auto tmp:num[i]){
            int pos=tmp.first+1,id=tmp.second;
            add(i+1,tmp.first+1,cal({x[i],y[i]},{x[pos-1],y[pos-1]}),f[id]*cal({x[i],y[i]},{x[pos-1],y[pos-1]}));
            add(tmp.first+1,i+1,cal({x[i],y[i]},{x[pos-1],y[pos-1]}),f[id]*cal({x[i],y[i]},{x[pos-1],y[pos-1]}));
        }
    }
    cout<<dij()<<endl;
}
View Code

B题 签到

技术分享图片
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;
map<string,int>mp;
int main(){
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    string s;
    mp.clear();
    for(int i=1;i<=n;i++)
    {
        cin>>s;
        mp[s]++;
    }
    for(auto it=mp.begin();it!=mp.end();it++)
    {
        if(it->second>(n-(it->second)))
        {
            cout<<it->first<<endl;
            return 0;
        }
    }
    cout<<"NONE"<<endl;
    return 0;
}
View Code

C题 签到

技术分享图片
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;
string s;
set<int> m1;
int main(){
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    int i;
    for(i=0;i<=n+1;i++){
        m1.insert(i);
    }
    for(i=1;i<=n;i++){
        cin>>s;
        if(s[0]==-)
            continue;
        if((int)s.size()>=7)
            continue;
        int ans=0;
        for(int j=0;j<(int)s.size();j++){
            ans=ans*10+(s[j]-0);
        }
        if(m1.count(ans))
            m1.erase(ans);
    }
    cout<<*m1.begin()<<endl;
    return 0;
}
View Code

F题 计算几何

技术分享图片
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;
struct point
{
    double x,y;
}p[55];
 
point operator - (point x,point y)
{
    point tmp;
    tmp.x=x.x-y.x;
    tmp.y=x.y-y.y;
    return tmp;
}
 
double cross(point a,point b)
{
    return a.x*b.y-a.y*b.x;
}
 
double area(point *p,int n)
{
    double res=0;
    p[n+1]=p[1];
    for(int i=1;i<=n;i++)
        res+=(cross(p[i],p[i+1]));
    return fabs(res/2.0);
}
 
int main(){
    int T;
    scanf("%d",&T);
    double ans=0;
    while(T--)
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%lf%lf",&p[i].x,&p[i].y);
        ans+=area(p,n);
    }
    printf("%lld\n",(ll)floor(ans));
    return 0;
}
View Code

I 签到

技术分享图片
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3e5+10;
int main(){
    ios::sync_with_stdio(false);
    ll a,b,c;
    cin>>a>>b>>c;
    cout<<(a+1)*(b+1)/(c+1)-1<<endl;
}
View Code

 

2019SWERC题解

原文:https://www.cnblogs.com/ctyakwf/p/13817632.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!