zoukankan      html  css  js  c++  java
  • 【考试】9.18

    最近这题解是真不想写,

    正好这次不太难,就放个代码吧

    1>比赛

    新奇的方法,但是我不想分析

    精度操作很烦人

    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    using namespace std;
    int n;
    const int N=5e4+3;
    long long a[N],b[N];
    long long sum[N],sq_sum[N],ans;
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
        for(int i=1;i<=n;i++) scanf("%lld",&b[i]);
        sort(a+1,a+n+1),sort(b+1,b+n+1);
        
        for(int i=1;i<=n;i++)
            sum[i]=sum[i-1]+b[i],sq_sum[i]=sq_sum[i-1]+b[i]*b[i];
        
        for(int i=1;i<=n;i++)
        {
            int pos=upper_bound(b+pos,b+n+1,a[i])-b-1;
            ans+=a[i]*a[i]*pos +sq_sum[pos] -2*a[i]*sum[pos] ;
            ans-=a[i]*a[i]*(n-pos) +(sq_sum[n]-sq_sum[pos]) -2*a[i]*(sum[n]-sum[pos]);
        }
        
        double t=ans*1.0/n;
        printf("%.1lf
    ",t);
        return 0;
    } 

    2>数字

    乘法原理,容斥原理,dp

    //dfs递归->超时
    //全排列->失败
    //递推->0.3s->ok!
    
    //两种条件,本质相似,但是计数会重复(或运算)
    //条件只有一个,sum相等,所以就cnt*cnt
    //然后*2
    
    //再想交集
    //额......  
    
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<ctime>
    using namespace std;
    int n,len;
    char c[15];
    const int N=1003,mod=999983;
    int d[13],cnt[N][N*10];
    long long ans[5];
    
    void prepare()
    {
        int mx;
        cnt[0][0]=1;
        for(int i=1;i<=n;i++)
        {
            mx=i*9;
            for(int j=1;j<=len;j++)
                for(int k=d[j];k<=mx;k++)
                    cnt[i][k]=(cnt[i][k] +cnt[i-1][k-d[j]])%mod;
        }
    }
    void work(int pos,int k)
    {
        int mx=k*9;
        for(int i=0;i<=mx;i++) ans[pos]=(ans[pos]+1LL*cnt[k][i]*cnt[k][i]%mod)%mod;
    }
    
    int main()
    {
        scanf("%d%s",&n,c+1) ;
        //clock_t startTime,endTime;
        //startTime = clock();
        len=strlen(c+1);
        for(int i=1;c[i];i++) d[i]=c[i]-'0';
        prepare();
        
        work(0,n);
        ans[0]<<=1;
        work(1,n>>1);
        work(2,n+1>>1);
        
        printf("%lld
    ",((ans[0]-ans[1]*ans[2])%mod+mod)%mod);
        //endTime = clock();//计时结束
        //cout << "The run time is: " <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
        return 0;
    } 

    3>祖孙询问

    水啊,LCA

    #include<cstdio>
    #include<cstdlib>
    #include<vector>
    #include<algorithm>
    using namespace std;
    int n,m,rt,q;
    const int N=4e4+3;
    int dep[N],fa[N][17];
    vector <int> g[N];
    void dfs(int u,int ff)
    {
        fa[u][0]=ff,dep[u]=dep[ff]+1;
        for(int i=1;i<17 && fa[u][i-1];i++)
            fa[u][i]=fa[fa[u][i-1]][i-1];
        
        int sz=g[u].size() ;
        for(int i=0;i<sz;i++)
            if(g[u][i]!=ff) dfs(g[u][i],u);
    }
    void query(int u,int v)
    {
        if(!dep[u] || !dep[v]) 
        {
            printf("0
    ");
            return ;
        }
        
        int flag=2;
        if(dep[u]<dep[v]) swap(u,v),flag=1;
        int dis=dep[u]-dep[v];
        for(int i=1,j=0;i<=dis;i<<=1,j++)
            if(dis&i) u=fa[u][j];
        if(u==v) printf("%d
    ",flag);
        else printf("0
    ");
    }
    int main()
    {
        scanf("%d",&n);
        int u,v;
        while(n--)
        {
            scanf("%d%d",&u,&v);
            if(v==-1) rt=u;
            else g[u].push_back(v),g[v].push_back(u);  
        }
        dfs(rt,0);
        
        scanf("%d",&q);
        while(q--)
        {
            scanf("%d%d",&u,&v);
            query(u,v);
        }
        
        return 0;
    }
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    using namespace std;
    int n;
    const int N=5e4+3;
    long long a[N],b[N];
    long long sum[N],sq_sum[N],ans;
     
    int main()
    {
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
    for(int i=1;i<=n;i++) scanf("%lld",&b[i]);
    sort(a+1,a+n+1),sort(b+1,b+n+1);
     
    for(int i=1;i<=n;i++)
    sum[i]=sum[i-1]+b[i],sq_sum[i]=sq_sum[i-1]+b[i]*b[i];
     
    for(int i=1;i<=n;i++)
    {
    int pos=upper_bound(b+pos,b+n+1,a[i])-b-1;
    ans+=a[i]*a[i]*pos +sq_sum[pos] -2*a[i]*sum[pos] ;
    ans-=a[i]*a[i]*(n-pos) +(sq_sum[n]-sq_sum[pos]) -2*a[i]*(sum[n]-sum[pos]);
    }
     
    double t=ans*1.0/n;
    printf("%.1lf ",t);
    return 0;
    }
  • 相关阅读:
    Ajax:创建提示工具
    Ajax:自动刷新
    Ajax:动态加载列表框
    The Elements of C# Style Packaging
    Ajax:读取响应首部
    Ajax:发送请求与处理响应
    XMLHttpRequest对象
    WPF学习:XAML概述
    Ajax:进度条
    Ajax:数据验证
  • 原文地址:https://www.cnblogs.com/xwww666666/p/11548788.html
Copyright © 2011-2022 走看看