zoukankan      html  css  js  c++  java
  • 2019SWERC题解

    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
    ",(ll)floor(ans));
        return 0;
    }
    View Code

    G题 拓扑排序

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> pll;
    const int N=1e5+10;
    const int inf=0x3f3f3f3f;
    const int M=2e7;
    int in[N],h[M],ne[M],e[M],idx;
    struct node{
        int id;
        int k;
        bool operator <(const node &t) const{
            return k>t.k;
        }
    }g[N];
    string s[N];
    int st[300][300],n;
    map<string,int> m1;
    int last[N];
    int ans[N];
    void add(int a,int b){
        e[idx]=b,ne[idx]=h[a],h[a]=idx++;
    }
    void topo(){
        int i;
        priority_queue<node> q;
        for(i=1;i<=n;i++){
            if(!in[i])
                q.push(g[i]);
        }
        int cnt=0;
        while(q.size()){
            auto t=q.top();
            q.pop();
            ans[++cnt]=t.k;
            for(int i=h[t.id];i!=-1;i=ne[i]){
                int j=e[i];
                in[j]--;
                if(!in[j]){
                    q.push(g[j]);
                }
            }
        }
    }
    int main(){
        ios::sync_with_stdio(false);
        memset(h,-1,sizeof h);
        int i;
        int S,L;
        cin>>S>>L>>n;
        for(i=1;i<=S;i++)
            cin>>s[i];
        sort(s+1,s+1+S);
        for(i=1;i<=S;i++){
            m1[s[i]]=i;
        }
        memset(last,-1,sizeof last);
        for(i=1;i<=L;i++){
            string a,b;
            cin>>a>>b;
            st[m1[a]][m1[b]]=st[m1[b]][m1[a]]=1;
        }
        for(i=1;i<=n;i++){
            string a;
            cin>>a;
            g[i].id=i,g[i].k=m1[a];
            for(int j=1;j<=S;j++){
                if(last[j]==-1||st[g[i].k][j])
                    continue;
                add(last[j],i);
                in[i]++;
            }
            last[g[i].k]=i;
        }
        topo();
        for(i=1;i<=n;i++){
            cout<<s[ans[i]]<<" ";
        }
        cout<<endl;
    }
    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
  • 相关阅读:
    卷积神经网络(CNN)在句子建模上的应用
    Deep Learning for Information Retrieval
    Understanding Convolutional Neural Networks for NLP
    Language Modeling with Gated Convolutional Networks
    Beyond Globally Optimal: Focused Learning
    基于图像信息的搭配商品推荐
    阿里深度兴趣网络模型paper学习
    DNN论文分享
    用深度学习(DNN)构建推荐系统
    基于2-channel network的图片相似度判别
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/13817632.html
Copyright © 2011-2022 走看看