zoukankan      html  css  js  c++  java
  • 2017 济南综合班 Day 3

    T1  黑化

    题意:

    求一个字符串是否可能包含另一个字符串

    字符串中的?可以匹配任意字母

    可能输出 God bless You!

    一定不可能 输出 Game Over!

    计算fail数组时,fail数组不具有传递性

    例:

    pqkbpqsbqszz
    pqkbpq?z

    在z处失配后:

    pqkbpqsbqszz
        pqkbpq?z

    z匹配成功,误认为包含

    因为计算fail时,?匹配了 k,而匹配时 ?匹配了s

    s不和k匹配

    即?不具有传递性

    #include<cstdio>
    #include<cstring>
    #define N 100001
    using namespace std;
    int lens,lent,f[N];
    char s[N],t[N];;
    void getfail()
    {
        int j;
        for(int i=1;i<lent;i++)
        {
            j=f[i];
            while(j && t[i]!=t[j]) j=f[j];
            f[i+1]= t[i]==t[j] ? j+1 : 0;
        }
    }
    void work()
    {
        int j=0;
        for(int i=0;i<lens;i++)
        {
            while(j && s[i]!=t[j] && s[i]!='?' && t[j]!='?') j=f[j];
            if(s[i]==t[j] || s[i]=='?' || t[j]=='?') j++;
            if(j==lent) { printf("God bless You!
    "); return; }
        }
        printf("Game Over!
    ");
    }
    int main()
    {
        freopen("trigger.in","r",stdin);
        freopen("trigger.out","w",stdout);
        int T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%s%s",t,s);
            lent=strlen(t); 
            lens=strlen(s);
            getfail();
            work();
        }
    }
    View Code

    T2 便当

    不共行不共列 --> 原图行列交换无影响

    原图转化成这样

    然后DP

    #include<cstdio>
    #define N 210
    #define mod 504
    using namespace std;
    int n,k,dp[N][N];
    int main()
    {
        freopen("kill.in","r",stdin);
        freopen("kill.out","w",stdout);
        scanf("%d%d",&n,&k);
        if(k>=n*2) { printf("0"); return 0; }
        dp[0][0]=1;
        n=(n<<1)-1;
        for(int i=1;i<=n;i++)
        {
            for(int j=0;j<=k;j++) dp[i][j]=dp[i-1][j];
            for(int j=1;j<=k;j++) dp[i][j]=(dp[i][j]+dp[i-1][j-1]*((i+1)/2*2-1-(j-1)))%mod;
        }
        printf("%d",dp[n][k]);
    }
    View Code

    T3 蝉

    正解 树链剖分线段树维护等差序列

    弃疗

    90 暴力法:

    连续的操作1一块儿弄,spfa

    #include<cstdio>
    #include<queue>
    #include<cstring>
    #define N 200001
    using namespace std;
    int tot,front[N],to[N*2],nxt[N*2];
    int dis[N],tmp[N];
    bool v[N],have[N];
    queue<int>q;
    void add(int u,int v)
    {
        to[++tot]=v; nxt[tot]=front[u]; front[u]=tot;
        to[++tot]=u; nxt[tot]=front[v]; front[v]=tot;
    }
    void bfs()
    {
        memset(dis,-1,sizeof(dis));
        dis[1]=0; q.push(1);
        int now;
        while(!q.empty())
        {
            now=q.front(); q.pop();
            for(int i=front[now];i;i=nxt[i])
             if(dis[to[i]]==-1)
             {
                 dis[to[i]]=dis[now]+1;
                 q.push(to[i]);
             }
        }
    }
    void spfa()
    {
        int now;
        while(!q.empty())
        {
            now=q.front(); q.pop(); v[now]=false;
            for(int i=front[now];i;i=nxt[i])
             if(dis[to[i]]>dis[now]+1)
             {
                 dis[to[i]]=dis[now]+1;
                 if(!v[to[i]]) q.push(to[i]),v[to[i]]=true;
             }
        }
    }
    int main()
    {
        freopen("cicada.in","r",stdin);
        freopen("cicada.out","w",stdout);
        int n,m;
        scanf("%d%d",&n,&m);
        int u,vv;
        for(int i=1;i<n;i++)
        {
            scanf("%d%d",&u,&vv);
            add(u,vv);
        }
        bfs();
        have[1]=true;
        int opt,x;
        while(m--)
        {
            scanf("%d%d",&opt,&x);
            if(opt==1) 
            { 
                if(tmp[0]) 
                {
                    spfa();
                    for(int j=1;j<=tmp[0];j++) printf("%d
    ",dis[tmp[j]]);
                    tmp[0]=0;
                }
                if(!have[x]) q.push(x),dis[x]=0,v[x]=true; 
            }
            else tmp[++tmp[0]]=x;
        }
        if(tmp[0])
        {
            spfa();
            for(int j=1;j<=tmp[0];j++) printf("%d
    ",dis[tmp[j]]);
        }
    }
    View Code
  • 相关阅读:
    Mac下mysql出现错误:ERROR 1055 (42000)
    单表查询
    外键的变种 三种关系
    Java8中Lambda表达式详解
    Java中的比较器Comparable、Comparator
    Java创建线程的方法
    java日期格式化
    Docker容器如何修改hosts
    使用postman可以正常访问,但是在应用中返回415状态码
    使用tcpdump进行抓包
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/7348669.html
Copyright © 2011-2022 走看看