• 2019 Multi-University Training Contest 6


    Salty Fish

    Support or Not

    Three Investigators

    Milk Candy

    Ridiculous Netizens

    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn=5100;
    const int mod=1e9+7;
    int head[maxn],t,son[maxn],m,f[maxn],n,now,a[maxn],cnt,tmp[maxn],kuai[3000],dp[maxn][3000],ok[maxn],ans;
    
    struct edge
    {
        int v,next;
    } e[5100];
    
    void add(int u,int v)
    {
        t++;
        e[t].v=v;
        e[t].next=head[u];
        head[u]=t;
        ok[t]=1;
    }
    
    void get_root(int u,int fa)
    {
        son[u]=1;
        f[u]=0;
        for (int i=head[u]; i; i=e[i].next)
            if (ok[i]&&e[i].v!=fa)
            {
                int v=e[i].v;
                get_root(v,u);
                son[u]+=son[v];
                f[u]=max(f[u],son[v]);
            }
        if (n-son[u]>f[u])
            f[u]=n-son[u];
        if (f[u]<f[now])
        {
            now=u;
        }
    }
    
    void dfs(int x,int y)
    {
        int k=a[x];
        for (int i=1; i<=cnt; i++)
        {
            tmp[i]=0;
        }
        for (int i=1,j=1; i<=cnt; i++)
        {
            int t=kuai[i]/k;
            if (t==0)
            {
                continue;
            }
            while (kuai[j]>t)
            {
                j++;
            }
            tmp[j]=(tmp[j]+dp[x][i])%mod;
        }
        for (int i=1; i<=cnt; i++)
        {
            dp[x][i]=tmp[i];
        }
        for (int i=head[x]; i; i=e[i].next)
        {
            if (ok[i])
            {
                int u=e[i].v;
                if (u==y)
                {
                    continue;
                }
                for (int j=1; j<=cnt; j++)
                {
                    dp[u][j]=dp[x][j];
                }
                dfs(u,x);
                for (int j=1; j<=cnt; j++)
                {
                    dp[x][j]=(dp[x][j]+dp[u][j])%mod;
                }
            }
        }
    }
    
    void solve(int u)
    {
        for (int i=1; i<=cnt; i++)
        {
            dp[u][i]=0;
        }
        dp[u][1]=1;
        dfs(u,0);
        for (int i=1; i<=cnt; i++)
        {
            ans=(ans+dp[u][i])%mod;
        }
        for (int i=head[u]; i; i=e[i].next)
        {
            if (ok[i])
            {
                ok[i^1]=0;
                f[0]=n=son[e[i].v];
                get_root(e[i].v,now=0);
                solve((now));
            }
        }
    }
    
    int main()
    {
       // freopen("1.txt","r",stdin);
        int _;
        scanf("%d",&_);
        while (_--)
        {
            t=1;
            scanf("%d%d",&n,&m);
            cnt=ans=0;
            for (int i=1; i<=n; i++)
            {
                son[i]=f[i]=head[i]=0;
                scanf("%d",&a[i]);
            }
            for (int i=1; i<=m; i=m/(m/i)+1)
            {
                kuai[++cnt]=m/i;
            }
            for (int i=1,u,v; i<n; i++)
            {
                scanf("%d%d",&u,&v);
                add(u,v);
                add(v,u);
            }
            f[0]=n;
            get_root(1,now=0);
            solve(now);
            printf("%d
    ",ans);
        }
        return 0;
    }

    Stay Real

    #include <bits/stdc++.h>
     
    using namespace std;
     
    const int maxn=100010;
    typedef long long ll;
    struct node
    {
        ll val,id;
        node(int _val,int _id):val(_val),id(_id) {};
        bool operator < (const node &b)const
        {
            return val<b.val;
        }
    };
     
    ll h[maxn],vis[maxn*2],n,suma,sumb,flag,fa;
    priority_queue<node>q;
     
    int main()
    {
        int T;
        scanf("%d",&T);
        while (T--)
        {
            scanf("%lld",&n);
            for (int i=1; i<=n; i++)
            {
                vis[i]=1;
            }
            for (int i=1; i<=n; i++)
            {
                scanf("%lld",&h[i]);
                if (vis[i<<1]==0&&vis[i<<1|1]==0)
                {
                    q.push(node(h[i],i));
                }
            }
            suma=sumb=0;
            flag=1;
            while (!q.empty())
            {
                node tmp=q.top();
                q.pop();
                if (flag)
                {
                    suma+=tmp.val;
                }
                else
                {
                    sumb+=tmp.val;
                }
                vis[tmp.id]=0;
                flag^=1;
                fa=tmp.id>>1;
                if (vis[fa<<1]==0&&vis[fa<<1|1]==0&&fa!=0)
                {
                    q.push(node(h[fa],fa));
                }
            }
            printf("%lld %lld
    ",suma,sumb);
        }
        return 0;
    }

    TDL

    #include <bits/stdc++.h>
    
    using namespace std;
    
    typedef long long ll;
    ll k,m,i,flag,cnt,kk;
    int main()
    {
        int T;
        scanf("%d",&T);
        while (T--)
        {
            flag=0;
            scanf("%lld%lld",&k,&m);
            for (i=max(1ll,k-1000); i<=k+1000; i++)
            {
                cnt=0;
                for (ll j=i+1;; j++)
                {
                    if (__gcd(i,j)==1)
                    {
                        cnt++;
                        if (cnt==m)
                        {
                            kk=j;
                            break;
                        }
                    }
                }
                if (cnt==m&&((kk-i)^i)==k)
                {
                    flag=1;
                    break;
                }
            }
            if (flag)
            {
                printf("%lld
    ",i);
            }
            else
            {
                puts("-1");
            }
        }
        return 0;
    }

    Snowy Smile

    #include<bits/stdc++.h>
     
    using namespace std;
    const int maxn=2001;
    typedef long long ll;
    struct node
    {
        int l,r;
        ll d,lmax,rmax,sum;
    } tree[maxn+maxn-100];
     
    int x[maxn],y[maxn],w[maxn],xx[maxn],yy[maxn],n,dp[maxn][maxn];
    ll ans;
     
    vector<pair<int,int> >a[maxn];
     
    inline int read()
    {
        int res=0,f=1;
        char ch=getchar();
        while (!isdigit(ch))
        {
            if (ch=='-')
            {
                f=-f;
            }
            ch=getchar();
        }
        while (isdigit(ch))
        {
            res=(res<<3)+(res<<1)+ch-'0';
            ch=getchar();
        }
        return f*res;
    }
     
     
    inline void build (int rt,int l,int r)
    {
        tree[rt].l=l;
        tree[rt].r=r;
        if (l==r)
        {
            tree[rt].lmax=tree[rt].rmax=tree[rt].sum=tree[rt].d=0;
            return;
        }
        int mid=(l+r)>>1;
        build (rt<<1,l,mid);
        build (rt<<1|1,mid+1,r);
        tree[rt].sum=tree[rt<<1].sum+tree[rt<<1|1].sum;
     
        tree[rt].lmax=max(tree[rt<<1].lmax,tree[rt<<1].sum+tree[rt<<1|1].lmax);
     
        tree[rt].rmax=max(tree[rt<<1|1].rmax,tree[rt<<1|1].sum+tree[rt<<1].rmax);
     
        tree[rt].d=max(tree[rt<<1].d,max(tree[rt<<1|1].d,tree[rt<<1|1].lmax+tree[rt<<1].rmax));
    }
     
    inline void change(int rt,int pos,ll d)
    {
        if (tree[rt].l==tree[rt].r)
        {
            tree[rt].lmax=tree[rt].rmax=tree[rt].sum=tree[rt].d+=d;
            return;
        }
        int mid=(tree[rt].l+tree[rt].r)>>1;
        if (pos<=mid)
        {
            change(rt<<1,pos,d);
        }
        else
        {
            change(rt<<1|1,pos,d);
        }
        tree[rt].sum=tree[rt<<1].sum+tree[rt<<1|1].sum;
     
        tree[rt].lmax=max(tree[rt<<1].lmax,tree[rt<<1].sum+tree[rt<<1|1].lmax);
     
        tree[rt].rmax=max(tree[rt<<1|1].rmax,tree[rt<<1|1].sum+tree[rt<<1].rmax);
        tree[rt].d=max(tree[rt<<1].d,max(tree[rt<<1|1].d,tree[rt<<1|1].lmax+tree[rt<<1].rmax));
    }
     
    int main()
    {
        int T,posx,posy,nx,ny,len;
        T=read();
        while (T--)
        {
            n=read();
            for (register int i=1; i<=n; i++)
            {
                x[i]=read();
                y[i]=read();
                w[i]=read();
                xx[i]=x[i];
                yy[i]=y[i];
                a[i].clear();
                for (register int j=1; j<=n; j++)
                {
                    dp[i][j]=0;
                }
            }
            sort(xx+1,xx+n+1);
            sort(yy+1,yy+n+1);
            nx=unique(xx+1,xx+n+1)-(xx+1);
            ny=unique(yy+1,yy+n+1)-(yy+1);
            for (register int i=1; i<=n; i++)
            {
                posx=lower_bound(xx+1,xx+nx+1,x[i])-xx;
                posy=lower_bound(yy+1,yy+ny+1,y[i])-yy;
                if(dp[posy][posx]==0)
                {
                    a[posy].push_back(make_pair(posx,posy));
                }
                dp[posy][posx]+=w[i];
            }
            build (1,1,nx);
            ans=0;
            for (register int i=1; i<=ny; i++)
            {
                for (register int j=i; j<=ny; j++)
                {
                    len=a[j].size();
                    for (register int k=0; k<len; k++)
                    {
                        change(1,a[j][k].first,dp[a[j][k].second][a[j][k].first]);
                    }
                    ans=max(ans,tree[1].d);
                }
                build (1,1,nx);
            }
            printf("%lld
    ",ans);
        }
    }

    Faraway

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    int n,m,xe[100],ye[100],x[100],y[100],a[100],b[100];
    ll ans;
    bool check(int x,int y)
    {
        for (int i=1; i<=n; i++)
        {
            if ((abs(x-xe[i])+abs(y-ye[i]))%a[i]!=b[i])
            {
                return 0;
            }
        }
        return 1;
    }
    
    int cal(int l,int r)
    {
        r-=l;
        if (r<0)
        {
            return 0;
        }
        return r/60+1;
    }
    
    int main()
    {
        int _;
        scanf("%d",&_);
        while (_--)
        {
            scanf("%d%d",&n,&m);
            ans=0;
            for (int i=1; i<=n; i++)
            {
                scanf("%d%d%d%d",&xe[i],&ye[i],&a[i],&b[i]);
                x[i]=xe[i];
                y[i]=ye[i];
            }
            x[0]=0;
            y[0]=0;
            x[n+1]=m+1;
            y[n+1]=m+1;
            sort(x,x+n+2);
            sort(y,y+n+2);
            for (int i=0; i<=n; i++)
            {
                for (int j=0; j<=n; j++)
                {
                    for (int k=0; k<60; k++)
                    {
                        for (int l=0; l<60; l++)
                        {
                            int xx=x[i]+k;
                            int yy=y[j]+l;
                            if (check(xx,yy))
                            {
                                ans+=1ll*cal(xx,x[i+1]-1)*cal(yy,y[j+1]-1);
                            }
                        }
    
                    }
                }
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }

    Nonsense Time

    #include <bits/stdc++.h>
    const int maxn = 5e4+5;
    using namespace std;
    int a[maxn], b[maxn], c[maxn], d[maxn];
    int vis[maxn], used[maxn], path[maxn], n;
    int solve()
    {
        int len=0;
        for (int i=1; i<=n; i++)
        {
            if (vis[a[i]]==-1) continue;
            int it=lower_bound(d,d+len,a[i])-d;
            if (it==len)
            {
                d[len++]=a[i];
                path[i]=len;
            }
            else
            {
                d[it]=a[i];
                path[i]=it+1;
            }
        }
        memset(used,0,sizeof(used));
        int tmp=len;
        for (int i=n; i>=1; i--)
        {
            if (vis[a[i]]==-1)
            {
                continue;
            }
            if (path[i]==tmp)
            {
                used[a[i]]=1;
                tmp--;
            }
        }
        return len;
    }
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while (T--)
        {
            memset(vis,0,sizeof(vis));
            scanf("%d",&n);
            for (int i=1; i<=n; i++)
            {
                scanf("%d",&a[i]);
            }
            for (int i=1; i<=n; i++)
            {
                scanf("%d",&b[i]);
            }
            c[n]=solve();
            for (int i=n-1; i>=1; i--)
            {
                vis[a[b[i+1]]]=-1;
                if (used[a[b[i+1]]]==0)
                {
                    c[i]=c[i+1];
                }
                else
                {
                    c[i]=solve();
                }
            }
            for (int i=1; i<=n; i++)
            {
                printf("%d",c[i]);
                if (i==n)
                {
                    printf("
    ");
                }
                else
                {
                    printf(" ");
                }
            }
        }
    }

    Speed Dog

    11 Dimensions

  • 相关阅读:
    Anaconda下载与安装
    短语,直接短语,句柄,素短语,最左素短语区分
    sublime text安装package control
    Json数据解析
    hbase shell命令
    Web三级联动,数据库到界面
    解决C#窗体项目在win10运行模糊的问题
    Java通过反射访问及修改类内的私有变量
    PyCharm更改.PyCharm配置文件夹存储位置
    MineCraft Forge开发mod踩坑记录
  • 原文地址:https://www.cnblogs.com/Accpted/p/11316849.html
Copyright © 2020-2023  润新知