zoukankan      html  css  js  c++  java
  • 2019 East Central North America

    A Retribution!

    题目给出n个人的位置,m,p个两种仓库的位置,给一个人分配两个不同的仓库

    (参考大佬思路:先分配第一种仓库,对每个人到每个仓库的距离进行排序,安装排好的顺序分配,并检测这个人是否已经分配仓库,这个仓库是否已经被分配了,都没有则记录距离标记分配,在分配第二种仓库,输出总和

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1005;
    #define x first
    #define y second
    pair<double,double> j[maxn],t[maxn],f[maxn];
    struct node{
        int i,j;
        double d;
    }a1[maxn*maxn],a2[maxn*maxn];
    int vj[maxn],vt[maxn],vf[maxn];
    
    double dis(pair<double,double> a,pair<double,double> b){
        return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
    }
    bool cmp(node a,node b){
        if(a.d==b.d){
            return a.i<b.i;
        }
        return a.d<b.d;
    }
    int main(){
    
        int n,m,p,cnt1=0,cnt2=0;
        cin>>n>>m>>p;
        for(int i=0;i<n;i++){
            cin>>j[i].x>>j[i].y;
        }
        for(int i=0;i<m;i++){
            cin>>t[i].x>>t[i].y;
        }
        for(int i=0;i<p;i++){
            cin>>f[i].x>>f[i].y;
        }
    
    
        for(int i=0;i<n;i++){
            for(int k=0;k<m;k++){
                a1[cnt1].i=i;
                a1[cnt1].j=k;
                a1[cnt1].d=dis(j[i],t[k]);
                cnt1++;
            }
        }
        sort(a1,a1+cnt1,cmp);
        double sum=0;
        for(int i=0;i<cnt1;i++){
            if(vj[a1[i].i]==0 && vt[a1[i].j]==0){
                sum+=a1[i].d;
                vj[a1[i].i]=1;
                vt[a1[i].j]=1;
            }
        }
    
        for(int i=0;i<n;i++){
            for(int k=0;k<p;k++){
                a2[cnt2].i=i;
                a2[cnt2].j=k;
                a2[cnt2++].d=dis(j[i],f[k]);
            }
        }
        sort(a2,a2+cnt2,cmp);
        for(int i=0;i<cnt2;i++){
            if(vj[a2[i].i]!=2 && vf[a2[i].j]==0){
                sum+=a2[i].d;
                vj[a2[i].i]=2;
                vf[a2[i].j]=2;
            }
        }
        printf("%.7f",sum);
        return 0;
    
    }
    View Code

    F Musical Chairs

    思路:根据题意模拟

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=100005;
    long long a[maxn];
    struct stu{
    int m;
    int i;
    };
    int main(){
    
        int n,m,i=0,j;
        cin>>n;
        vector<stu> v;
        for(int i=0;i<n;i++){
            cin>>m;
            stu sss;
            sss.m=m;
            sss.i=i+1;
            v.push_back(sss);
        }
        while(v.size()>1){
           //cout<<i<<endl;
           j=i;
           i=(v.at(i).m-1)%v.size();
           i=(i+j)%v.size();
           //cout<<i<<" "<<v.at(i).m<<endl;
           v.erase(v.begin()+i);
           i=i%v.size();
        }
        cout<<v.at(0).i<<endl;
        return 0;
    }
    View Code

    G Out of Sorts

    思路:根据题意写二分,遍历判断有几个二分结果是对的

    哦我这个笨蛋有个中间变量用了int炸了检测好几次还没发现

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1000005;
    long long b[maxn];
    long long n,m,a,c,x0,cnt=0;
    bool pd(long long i)
    {
        long long l=1,r=n,mid;
        while(l<=r){
            mid=(l+r)/2;
            if(mid==i){
                return true;
            }else if(b[mid]>b[i] && i<mid){
                r=mid-1;
            }else if(b[mid]<b[i] && i>mid){
                l=mid+1;
            }else{
            break;
            }
        }
        return false;
    }
    int main(){
        cin>>n>>m>>a>>c>>x0;
        b[0]=x0;
        for(long long i=1;i<=n;i++){
            b[i]=(a*b[i-1]+c)%m;
            //cout<<b[i]<<endl;
        }
        for(long long i=1;i<=n;i++){
            if(pd(i)){
                cnt++;
            }
        }
        cout<<cnt<<endl;
        return 0;
    
    }
    View Code
  • 相关阅读:
    Sass-unitless()函数
    Sass函数:unit()函数
    Sass函数:Introspection 函数 -type-of()
    Sass函数-值列表index
    Sass函数--列表函数append
    Sass函数-join()函数
    Sass函数:列表函数nth
    Sass函数:值列表函数length
    Sass函数:random()函数
    学习笔记77—Iphone集
  • 原文地址:https://www.cnblogs.com/a-specter/p/15082991.html
Copyright © 2011-2022 走看看