zoukankan      html  css  js  c++  java
  • 模拟+细节——gym101667G

    被这题气死,做了半天才做出来

    求折线U在L上面的面积

    有两个点要注意:1.求的面积必须是封闭的,即开口的开头不算,开口的结尾不算

            2.最后x可以水平延伸到无限远

    #include<bits/stdc++.h>
    using namespace std;
    #define N 200006
    
    int n,m,tot,x[N],xl[N],yl[N],xu[N],yu[N];
    
    int main(){
        cin>>n>>m;
        x[++tot]=0;
        xl[0]=xu[0]=0;
        
        int px=0,py=-1;
        for(int i=1;i<=2*n+1;i++){
            int v;cin>>v;
            if(i%2)yl[++py]=v;
            else xl[++px]=v,x[++tot]=v;
        }
        px=0,py=-1;
        for(int i=1;i<=2*m+1;i++){
            int v;cin>>v;
            if(i%2)yu[++py]=v;
            else xu[++px]=v,x[++tot]=v;
        }
        sort(x+1,x+1+tot);
        
        n++;m++;
        xl[n]=xl[n-1]+100000;
        yl[n]=yl[n-1];
        xu[m]=xu[m-1]+100000;
        yu[m]=yu[m-1];
        n++;m++;
        x[++tot]=1000000;
        
        long long sum=0,time=0,ans=0;
        int flag=0,f=0;
        for(int i=1;i<=tot-1;i++){
            double mid=(x[i]+x[i+1])/2.0;
            int posl=lower_bound(xl,xl+n,mid)-xl-1;
            int hl=yl[posl];
            int posu=lower_bound(xu,xu+m,mid)-xu-1;
            int hu=yu[posu];
            if(hu>hl){
                if(flag==0)flag=1;
                sum+=1ll*(x[i+1]-x[i])*(hu-hl);
            }else {
                if(f || yu[0]<=yl[0]){
                    time+=flag;
                    ans+=sum;
                }
                f=1;
                flag=0;
                sum=0;
            }
        }
        
        cout<<time<<" "<<ans<<'
    ';
    } 
    /*
    5 4
    2 26 11 30 13 38 16 44 21 48 24
    5 23 8 31 10 35 15 41 18
    */
  • 相关阅读:
    SVG:中国地图
    网页编程工具:EditPlus
    js插件
    html: 仿制soundmanager2右上角面板
    代码:页面布局(含图片列表布局)
    写着玩: 图片 圆盘
    表格
    按钮
    插件:左侧下拉菜单
    颜色
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12595306.html
Copyright © 2011-2022 走看看