• 20161005模拟


    试题+评测数据下载:https://yunpan.cn/cvKJgPjvrIKAJ (提取码:2d8e)

    分析:

    T1 模拟计算几何问题 难点主要是圆的相交问题

    T2 约瑟夫环问题,模拟即可

    T3 稍微想想就能过,maxans:尽量多填数;minans:尽量少填数(满足主视图&左视图的情况下)

    2bc*cosA=b^2+c^2-a^2

    3

    T1

    AC代码:

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const double PI=3.14159265358979323846264; 
    struct node{
        double x,y;
        double r;
    }a[2];
    inline double getdis(node b,node c){
        double xx=b.x-c.x;
        double yy=b.y-c.y;
        return sqrt(xx*xx+yy*yy);
    }
    void deal(node b,node c){
        double len=getdis(b,c);
        if(len<=fabs(b.r-c.r)){
            if(b.r<c.r) swap(b,c);
            double t1=PI*b.r*b.r;
            printf("%.3lf
    ",t1);
            return ;
        }
        double L=b.r+c.r;
        double t1=PI*b.r*b.r;
        double t2=PI*c.r*c.r;
        if(L<=len){
            printf("%.3lf
    ",t1+t2);
            return ;
        }
        double ang1=acos((b.r*b.r+len*len-c.r*c.r)/2.0/b.r/len);  
        double ang2=acos((c.r*c.r+len*len-b.r*b.r)/2.0/c.r/len);
        double ret=ang1*b.r*b.r+ang2*c.r*c.r-len*b.r*sin(ang1);   
        printf("%.3lf
    ",t1+t2-ret);
    }
    int main(){
        freopen("standing.in","r",stdin);
        freopen("standing.out","w",stdout);
        int T;scanf("%d",&T);
        while(T--){
            scanf("%lf%lf%lf%lf%lf%lf",&a[0].x,&a[0].y,&a[0].r,&a[1].x,&a[1].y,&a[1].r);
            deal(a[0],a[1]);
        }
        return 0;
    }

    T2

    AC代码1:

    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int N=1e6+10;
    int n,t;
    bool vis[N];
    void deal(int m){
        int tot=n;
        int p=0;
        for(int i=1;tot>1;i++){
            if(i>n) i=1;
            if(vis[i]) continue;
            if(++p==m) p=0,vis[i]=1,tot--;
        }
        for(int i=1;i<=n;i++) if(!vis[i]){printf("%d
    ",i);return ;}
    }
    int main(){
        freopen("resist.in","r",stdin);
        freopen("resist.out","w",stdout);
        scanf("%d%d",&n,&t);
        deal(t);
        return 0;
    }

    AC代码2:

    #include<cstdio>
    using namespace std;
    int n,m,s;
    int main(){
        freopen("resist.in","r",stdin);
        freopen("resist.out","w",stdout);
        scanf("%d%d",&n,&m);
        for(int i=2;i<=n;i++) s=(s+m)%i;
        printf("%d",s+1);
        return 0;
    }

    T3

    AC代码1:

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int N=1e3+10;
    int n,m,zhu[N],zuo[N],mp[N][N];
    bool vis1[N],vis2[N];
    int minans,maxans;
    void get_min(){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(!vis1[i]&&!vis2[j]&&zhu[i]==zuo[j]){
                    vis1[i]=vis2[j]=1;
                    mp[i][j]=zhu[i];
                }
            }
        }
        for(int i=1;i<=n;i++){
            if(!vis1[i]){
                for(int j=1;j<=m;j++){
                    if(!mp[i][j]&&zhu[i]<=zuo[j]){
                        mp[i][j]=zhu[i];
                        if(zhu[i]==zuo[j]) vis2[j]=1;
                        break;
                    }
                }
            }
        }
        for(int j=1;j<=m;j++){
            if(!vis2[j]){
                for(int i=1;i<=n;i++){
                    if(!mp[i][j]&&zuo[j]<=zhu[i]){
                        mp[i][j]=zuo[j];break;
                    }
                }
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                minans+=mp[i][j];
            }
        }
    }
    void get_max(){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                maxans+=min(zhu[i],zuo[j]);
            }
        }
    }
    int main(){
        freopen("neighbor.in","r",stdin);
        freopen("neighbor.out","w",stdout);
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++) scanf("%d",zhu+i);
        for(int i=1;i<=m;i++) scanf("%d",zuo+i);
        get_min();
        get_max();
        printf("%d %d",minans,maxans);
        return 0;
    }

    AC代码2:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    const int N=1e3+10;
    using namespace std;
    int n,m,zhu[N],zuo[N],maxans,minans;
    int f[N],c[N];
    int main(){
        freopen("neighbor.in","r",stdin);
        freopen("neighbor.out","w",stdout);
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)scanf("%d",&zhu[i]);
        for(int i=1;i<=m;i++)scanf("%d",&zuo[i]);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                maxans+=min(zhu[i],zuo[j]);
        for(int i=1;i<=n;i++)f[zhu[i]]++;
        for(int i=1;i<=m;i++)c[zuo[i]]++;
        for(int i=0;i<=1000;i++) minans+=max(f[i],c[i])*i;
        printf("%d %d
    ",minans,maxans);
        return 0;    
    }
  • 相关阅读:
    【转】浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)
    【转】1.2 CDN的基本工作过程
    【转】 最新版chrome谷歌浏览器Ajax跨域调试问题
    【转】网段,子网掩码,网络标识,IP划分
    【转】默认网关有什么用?我应当怎么填写默认网关和DNS呢
    【转】DHCP工作过程详解
    【转】WINS服务器与DNS服务器有什么区别?
    46. Permutations 排列数
    30. Substring with Concatenation of All Words
    29. Divide Two Integers
  • 原文地址:https://www.cnblogs.com/shenben/p/5932260.html
Copyright © 2020-2023  润新知