zoukankan      html  css  js  c++  java
  • 模拟赛(11.4)

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int main()
    {
        freopen("block.in","r",stdin);
        freopen("block.out","w",stdout);
        int T;
        scanf("%d",&T);
        while(T--)
        {
            long long n,ans=-1;
            scanf("%lld",&n);
            long long i=sqrt(n);
            for(long long j=i;j>=1;j--)
            {
                long long tmp=2*(i+(n/i));
                if(n%i) tmp+=2;
                if(ans==-1)ans=tmp;
                else ans=min(ans,tmp);
            }
            printf("%lld
    ",ans);
        }        
    }
    1
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    struct data
    {
        long long v;
        int x,y;
        bool operator < (const data &a)const
        {
            return v<a.v;
        }
    }e[20010];
    int fa[20010];
    int weight[20010];
    int find(int x) {return fa[x]==x?x:fa[x]=find(fa[x]);}
    int main()
    {
        freopen("tree.in","r",stdin);
        freopen("tree.out","w",stdout);
        int T;
        scanf("%d",&T);
        while(T--)
        {
            memset(e,0,sizeof(e));
            int n;
            scanf("%d",&n);
            for(int i=1;i<=n;i++){fa[i]=i;weight[i]=1;}
            for(int i=1;i<n;i++)
            {
                scanf("%d%d",&e[i].x,&e[i].y);
                scanf("%lld",&e[i].v);
            }
            sort(e+1,e+n);
            long long ans=0;
            for(int i=1;i<n;i++)
            {
                int x=find(e[i].x),y=find(e[i].y),val=e[i].v;
                ans+=(long long)(weight[x]*weight[y])*(long long)(val+1)-1;
                fa[x]=y;
                weight[y]+=weight[x];
            }
            printf("%lld
    ",ans);
        }        
    }
    2
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    struct data
    {
        int a,b;
        bool operator <(const data &t) const
        {
            return a<t.a;
        }
        bool operator == (const data &t)const
        {
            return (a==t.a&&b==t.b);
        }    
    }ans[200010],tmx[200010];
    int nm[200010];
    int lg[200010];
    int f[2][25][200010];
    int mi[30];
    int n;
    int mark[200010];
    void work(int l,int r)
    {
        if(l>r) return;
        if(l+1==r) {ans[r].a=nm[l];ans[r].b=nm[r];ans[l].a=nm[l];ans[l].b=nm[r];return;}
        int tmp=r-l+1;
        int min1=n+1,min2=n+1;
        int p1=l,p2=l;
        int fg=l%2;
        for(int i=lg[tmp];i>=0;i--)
        {
            if(mi[i]<=tmp)
            {
                tmp-=mi[i];
                min1=min(min1,f[fg][i][p1]);
                p1+=mi[i];
            }
        }
        fg^=1;
        p1=mark[min1];
        p2=p1+1;
        tmp=r-p2+1;
        for(int i=lg[tmp];i>=0;i--)
        {
            if(mi[i]<=tmp)
            {
                tmp-=mi[i];
                min2=min(min2,f[fg][i][p2]);
                p2+=mi[i];
            }
        }
        p2=mark[min2];
        work(l,p1-1);work(p1+1,p2-1);work(p2+1,r);
        int t1=l,t2=p1+1,t3=p2+1;
        int cnt=0;
        tmx[cnt].a=min1,tmx[cnt++].b=min2;
        tmx[cnt].a=min1,tmx[cnt++].b=min2;
        while(t1<=p1-1||t2<=p2-1||t3<=r)
        {
            data anss;anss.a=anss.b=n+1;
            if(t1<=p1-1) anss=min(anss,ans[t1]);
            if(t2<=p2-1) anss=min(anss,ans[t2]);
            if(t3<=r) anss=min(anss,ans[t3]);
            if(anss==ans[t1]) tmx[cnt++]=ans[t1++];
            else if(anss==ans[t2]) tmx[cnt++]=ans[t2++];
            else tmx[cnt++]=ans[t3++];
        }
        for(int i=0;i<cnt;i++)
        {
            ans[i+l]=tmx[i];
        }
    }
    int main()
    {
        freopen("ball.in","r",stdin);
        freopen("ball.out","w",stdout);
        mi[0]=1;for(int i=1;i<25;i++) mi[i]=mi[i-1]*2;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            lg[i]=mi[lg[i-1]]*2>=n?lg[i-1]:lg[i-1]+1;
            scanf("%d",&nm[i]);
            mark[nm[i]]=i;
            f[i%2][0][i]=nm[i];
            f[(i+1)%2][0][i]=n+1;
        }
        for(int i=1;i<=lg[n];i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(j+mi[i]-1<=n)
                {
                    f[0][i][j]=min(f[0][i-1][j],f[0][i-1][j+mi[i-1]]);
                    f[1][i][j]=min(f[1][i-1][j],f[1][i-1][j+mi[i-1]]);
                }
            }
        }
        work(1,n);
        for(int i=1;i<=n;i+=2)
        {
            printf("%d %d ",ans[i].a,ans[i].b);
        }
    }
    3
  • 相关阅读:
    python -- twisted初探
    python -- redis连接与使用
    redis使用
    python -- 异步编程
    python
    python
    福大软工 · 最终作业
    福大软工 · 第十二次作业
    Beta 冲刺(7/7)
    Beta 冲刺(6/7)
  • 原文地址:https://www.cnblogs.com/wjxgy/p/7783134.html
Copyright © 2011-2022 走看看