• Day6上 括号匹配专项


    滑稽的题

    T1

    #include<iostream>
    #include<cstring>
    #include<queue>
    #include<algorithm>
    #include<cstdio>
    #include<cmath>
    #include<ctime>
    using namespace std;
    int n;
    int a,b,x;
    int main()
    {
    //    freopen("book.in","r",stdin);
    //    freopen("bok.out","w",stdout);
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&x);
            if(x==5)
            {
                a++;
                continue;
            }
            if(x==10)
            {
                if(a)
                {
                    a--;
                    b++;
                    continue;
                }else
                {
                    printf("No
    ");
                    return 0;
                }
            }
            if(x==20)
            {
                if(a&&b)
                {
                    a--;
                    b--;
                    continue;
                }
                if(a>=3&&(!b))
                {
                    a-=3;
                    continue;
                }
                printf("No
    ");
                return 0;
            }
        }    
        printf("YES
    ");
        return 0;
    }
    50

    奇怪我手动测得都对,而且超时也不太可能吧。? 待解决。

    模拟白

    T2

    #include<iostream>
    #include<cstring>
    #include<queue>
    #include<algorithm>
    #include<cstdio>
    #include<cmath>
    #include<ctime>
    using namespace std;
    const int N=1e6+100;
    int n,m;
    int sum[N],a[N];
    bool is[N];
    int main()//又来模拟? 
    {
        freopen("program.in","r",stdin);
        freopen("program.out","w",stdout);
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        scanf("%d",&m);
        for(int i=1,x;i<=m;i++)
        {
            scanf("%d",&x);
            is[x]=1;
        }
        for(int i=1;i<=n;i++)
        {
            if(is[i])    sum[a[i]]--;
            else
                sum[a[i]]++;
            if(sum[a[i]]<0)
            {
                printf("NO
    ");
                return 0;
            }
        }
        for(int i=1;i<=n;i++)
        {
            if(sum[i]<0||(sum[i]%2))
            {
                printf("NO
    ");
                return 0;
            }
            sum[i]/=2;
        }
        for(int i=n;i>=1;i--)
        if(!is[i])//要不是掉下这一步我就可能A了。
        {
            if(sum[a[i]])
            {
                is[i]=1;
                sum[a[i]]--;
            }
        }
        for(int i=1;i<=n;i++)
        {
            if(is[i])
                printf("-%d ",a[i]);
            else 
                printf("+%d ",a[i]);
        }    
        return 0;
    }

     括号翻转,站。

    区间dp。

    但我觉得,模拟就ok。

    T3

    #include<iostream>
    #include<cstring>
    #include<queue>
    #include<algorithm>
    #include<cstdio>
    #include<cmath>
    #include<ctime>
    using namespace std;
    const int N=14;
    int h[N],nex[N*2],to[N*2],w[N*2],cnt;
    int n,m,q;
    int x,y,z;
    void add()
    {
        scanf("%d%d%d",&x,&y,&z);
        to[++cnt]=y,nex[cnt]=h[x],h[x]=cnt,w[cnt]=z;
        to[++cnt]=x,nex[cnt]=h[y],h[y]=cnt,w[cnt]=z;
    }
    int kid[N][2];
    bool vis[N];
    int A,B,flag;
    void dfs(int x)
    {
        if(x==B)
        {        
            bool is=1;
            for(int i=1;i<=10;i++)
            {
                if(kid[i][0]&&(!kid[i][1]))
                    is=0;
                if(kid[i][1]&&(!kid[i][0]))
                    is=0;
                if(abs(kid[i][0]-kid[i][1])%2)
                    is=0;
            }
            if(is)    flag=1;
            return ;
        }
        for(int i=h[x],v;i;i=nex[i])
        if(!vis[to[i]])
        {
            vis[to[i]]=1;
            if(w[i]>0)
                kid[w[i]][1]++;
            else kid[-w[i]][0]++;
            dfs(to[i]);
            vis[to[i]]=0;
            if(w[i]>0)
                kid[w[i]][1]--;
            else kid[-w[i]][0]--;
        }
    }
    int main()
    {
        freopen("maze.in","r",stdin);
        freopen("maze.out","w",stdout);
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++)
            add();
        scanf("%d",&q);
        for(int i=1;i<=q;i++)
        {
            scanf("%d%d",&A,&B);
            flag=0;
            vis[A]=1;
            dfs(A);
            if(flag)    printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }
    first 25

    预处理Floyed  dp

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cstdlib>
    using namespace std;
    int n,m;
    int g[105][105][40],q[105*105*40][3],t,x,y,z;
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d%d",&x,&y,&z);
            if(!z)
            {
                if(z<0)    z=-z;
                else z+=10;
                g[x][y][z]=g[y][x][z]=1;
            }else
            {
                g[x][y][z]=g[y][x][z]=1;
                t++;q[t][0]=x,q[t][1]=y,q[t][2]=0;
                t++;q[t][0]=y,q[t][1]=x,q[t][0]=0;
            }
        }
        for(int i=1;i<=n;i++)
        {
            t++;
            q[t][0]=i;
            q[t][1]=i;
            q[t][2]=0;
        }
        for(int s=1;s<=t;s++)
        {
            int x=q[s][0];
            int y=q[s][1];
            int kid=q[s][2];
            if(!kid)
                for(int i=1;i<=n;i++)
                if(g[i][x][kid-10]==1&&g[i][y]==0)
                {
                    g[i][y][0]=1;
                    t++;
                    q[t][0]=i;
                    q[t][1]=y;
                    q[t][2]=0;
                }
            else
            for(int i=1;i<=10;i++)
            {
                if(g[i][x]&&(!g[i][y]))
                {
                    g[i][y]=1;
                    t++;
                    q[t][0]=i;
                    q[t][1]=y;
                    q[t][2]=0;
                }
                if(g[y][i]&&(!g[x][i]))
                {
                    g[x][i]=1;
                    t++;
                    q[t][0]=x;
                    q[t][1]=i;
                    q[t][2]=0;
                }
                for(int j=1;j<=10;j++)
                if(g[y][i][j]&&(!g[x][i][j+20]))
                {
                    g[x][i][j+20]=1;
                    t++;
                    q[t][0]=x;
                    q[t][1]=i;
                    q[t][2]=j+20;
                }
            }            
        }
        int q;
        scanf("%d",&q);
        while(q--)
        {
            scanf("%d%d",&x,&y);
            if(g[x][y][0])
                printf("YES
    ");
            else printf("NO
    ");
        
        }
        return 0;
    }
    dp
  • 相关阅读:
    深入理解MySQL开发性能优化.pptx
    公司mysql数据库设计与优化培训ppt
    weblogic 12c下jxls导出excel报错Could not initialize class org.apache.poi.xssf.usermodel.XSSFVMLDrawing
    智软科技医疗器械GSP监管软件通过多省市药监局检查
    论元数据和API管理工具
    sql server 2008空间释放
    论软件系统的设计与开发
    说说IT技术团队招聘那点事
    分布式系统基础设施概览
    分布式环境下rabbitmq发布与订阅端
  • 原文地址:https://www.cnblogs.com/CLGYPYJ/p/7771144.html
Copyright © 2020-2023  润新知