zoukankan      html  css  js  c++  java
  • 第一届

    A(Phone Number)

    1.字典树

    #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <queue>
    #include <vector>
    #include <algorithm>
    #define inf 0x3f3f3f3f
    using namespace std;
    int n;
    bool F;
    char tu[1010][20];
    int cmp(const void *a,const void *b)
    {
        return strcmp((char *)b,(char *)a);
    }
    typedef struct Node
    {
        int f;
        struct Node *next[15];
    }Node,*Tree;
    void Creat(Tree &T)
    {
        T=(Tree)malloc(sizeof(Node));
        for(int i=0;i<15;i++)
        {
            T->next[i]=NULL;
        }
        T->f=0;
    }
    void in(Tree &T,char *s)
    {
        int k=strlen(s);
        int t;
        Tree p=T;
        for(int i=0;i<k;i++)
        {
           t=s[i]-'0';
           if(p->next[t]==NULL)
            Creat(p->next[t]);
           p=p->next[t];
           p->f++;
        }
        if(p->f>1)
            F=true;
    }
    int main()
    {
        Tree T;
        while(scanf("%d",&n)!=EOF&&n!=0)
        {
            Creat(T);
            F=false;
            for(int i=0;i<n;i++)
            {
                scanf("%s",tu[i]);
    
            }
            qsort(tu,n,sizeof(tu[0]),cmp);
            for(int i=0;i<n;i++)
            {
                //cout<<tu[i]<<endl;
                  in(T,tu[i]);
            }
            if(F)
            {
                printf("NO
    ");
            }
            else printf("YES
    ");
        }
        return 0;
    }

    2.暴力  

    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    
    int cmp(const void *a,const void *b)
    {
     return strcmp((char *)a,(char *)b);
    }
    char a[1001][1001];
    int main()
    {
     int N,len,tt;
     while(scanf("%d",&N),N)
     {
     tt=0;
     for(int i = 0;i<N;i++)
     scanf("%s",a[i]);
     int flag = 1;
     qsort(a,N,sizeof(a[0]),cmp);
     for(int i = 0;i<N&&flag;i++)
     {
     len = strlen(a[i]);
     for(int j = 0;j<len&&flag;j++)
     {
     for(int k = i+1;k<N;k++)
     {
     if(a[i][j]==a[k][j])
     {
     tt++;
     break;
     }
     else tt=0;
     }
     if(tt==len)
     flag=0;
     }
     }
     printf("%s",flag?"YES":"NO");
     printf("
    ");
     }
     return 0;
    }
    View Code

    3.KMP

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    using namespace std;
    char a[1001][12];
    int next[100001];
    int cmp(const void *a,const void *b)
    {
        return strcmp((char *)a,(char *)b);
    }
    void Getnext(char s[])
    {
        int l=strlen(s);
        next[0]=-1;
        int j=-1;
        int i=0;
        while(i<l)
        {
            if(j==-1||s[i]==s[j])
            {
                i++;
                j++;
                next[i]=j;
            }
            else j=next[j];
        }
    
    }
    int main()
    {
        int n,flag=0;
        while(scanf("%d",&n)!=EOF&&n!=0)
        {
            flag=0;
            for(int i=0; i<n; i++)
                scanf("%s%*c",a[i]);
            qsort(a,n,sizeof(a[0]),cmp);
            for(int i=1; i<n; i++)
            {
                Getnext(a[i-1]);
                int k=0,k1=0;
                while(k<strlen(a[i])&&k1<strlen(a[i-1]))
                {
                    if(k1==-1||a[i][k]==a[i-1][k1])
                    {
                        k++;
                        k1++;
                    }
                    else k1=next[k1];
                }
                if(k1-strlen(a[i-1])==0)
                {
                    printf("NO
    ");
                    flag=1;
                    break;
                }
            }
            if(flag==0) printf("YES
    ");
    
        }
        return 0;
    }
    View Code

    B(Balloons)
    简单搜索

    #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <queue>
    #include <vector>
    #include <algorithm>
    #include <queue>
    #define inf 0x3f3f3f3f
    typedef long long ll;
    using namespace std;
    char tu[110][110];
    int v[110][110];
    int n;
    ll cn1,cn2;
    struct node
    {
        int x,y,st;
    };
    void dfs(int r,int c)
    {
        if(c<n-1&&tu[r][c+1]=='1'&&v[r][c+1]==0)
        {
            v[r][c+1]=1;
            dfs(r,c+1);
        }
        if(r<n-1&&tu[r+1][c]=='1'&&v[r+1][c]==0)
        {
            v[r+1][c]=1;
            dfs(r+1,c);
        }
        if(c>0&&tu[r][c-1]=='1'&&v[r][c-1]==0)
        {
            v[r][c-1]=1;
            dfs(r,c-1);
        }
        if(r>0&&tu[r-1][c]=='1'&&v[r-1][c]==0)
        {
            v[r-1][c]=1;
            dfs(r-1,c);
        }
    }
    void df(int r,int c)
    {
        if(c<n-1&&tu[r][c+1]=='1'&&v[r][c+1]==0)
        {
            v[r][c+1]=1;
            df(r,c+1);
        }
        if(r<n-1&&tu[r+1][c]=='1'&&v[r+1][c]==0)
        {
            v[r+1][c]=1;
            df(r+1,c);
        }
        if(c>0&&tu[r][c-1]=='1'&&v[r][c-1]==0)
        {
            v[r][c-1]=1;
            df(r,c-1);
        }
        if(r>0&&tu[r-1][c]=='1'&&v[r-1][c]==0)
        {
            v[r-1][c]=1;
            df(r-1,c);
        }
        if(r>0&&c>0&&tu[r-1][c-1]=='1'&&v[r-1][c-1]==0)
        {
            v[r-1][c-1]=1;
            df(r-1,c-1);
        }
        if(r>0&&c<n-1&&tu[r-1][c+1]=='1'&&v[r-1][c+1]==0)
        {
            v[r-1][c+1]=1;
            df(r-1,c+1);
        }
        if(r<n-1&&c>0&&tu[r+1][c-1]=='1'&&v[r+1][c-1]==0)
        {
            v[r+1][c-1]=1;
            df(r+1,c-1);
        }
        if(r<n&&c<n-1&&tu[r+1][c+1]=='1'&&v[r+1][c+1]==0)
        {
            v[r+1][c+1]=1;
            df(r+1,c+1);
        }
    }
    int main()
    {
        int K=0;
        while(scanf("%d",&n)!=EOF&&n!=0)
        {
            for(int i=0;i<n;i++)
            {
                scanf("%s",tu[i]);
            }
            cn1=0;
            cn2=0;
            memset(v,0,sizeof(v));
            for(int i=0;i<n;i++)
            {
                for(int j=0;j<n;j++)
                {
                    if(tu[i][j]=='1'&&v[i][j]==0)
                    {
                        v[i][j]=1;
                        dfs(i,j);
                        cn1++;
                    }
                }
            }
            memset(v,0,sizeof(v));
            for(int i=0;i<n;i++)
            {
                for(int j=0;j<n;j++)
                {
                    if(tu[i][j]=='1'&&v[i][j]==0)
                    {
                        v[i][j]=1;
                        df(i,j);
                        cn2++;
                    }
                }
            }
            printf("Case %d: %lld %lld
    ",++K,cn1,cn2);
            printf("
    ");
        }
        return 0;
    }

    D(shopping)

    #include <iostream> 
    #include <stdio.h> 
    #include <string.h> 
    #include <stdlib.h>
    using namespace std;
    int cmp(const void *a,const void *b)
    {
        return *(int *)a-*(int *)b;
    }
    int a[100001];
    int main()
    {
        int N;
        while(scanf("%d",&N)!=EOF&&N!=0)
        {
            for(int i=0; i<N; i++)   
                scanf("%d",&a[i]);
            qsort(a,N,sizeof(a[0]),cmp);
            printf("%d
    ",2*(a[N-1]-a[0]));
    
        }
        return 0;
    }
    View Code

    E(Emergency)(好题,Floy)

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <algorithm>
    #define inf 0x3f3f3f3f
    typedef long long ll;
    using namespace std;
    int n,m,q;
    int tu[310][310];
    bool h[310];
    int main()
    {
        int xx,yy,zz,K=0;
        while(scanf("%d%d%d",&n,&m,&q)!=EOF)
        {
            if(n==0&&m==0&&q==0) break;
            for(int i=0; i<n; i++)
            {
                for(int j=0; j<n; j++)
                    tu[i][j]=inf;
                tu[i][i]=0;
            }
            memset(h,0,sizeof(h));
            for(int i=0; i<m; i++)
            {
                scanf("%d%d%d",&xx,&yy,&zz);
                if(tu[xx][yy]>zz)
                    tu[xx][yy]=zz;
            }
            printf("Case %d:
    ",++K);
            while(q--)
            {
                scanf("%d",&zz);
                if(zz==0)
                {
                    scanf("%d",&xx);
                    if(h[xx])
                    {
                        printf("City %d is already recaptured.
    ",xx);
                        continue;
                    }
                    h[xx]=1;
                    for(int i=0; i<n; i++)
                    {
                        for(int j=0; j<n; j++)
                        {
                           if(tu[i][xx]!=inf&&tu[xx][j]!=inf&&tu[i][j]>tu[i][xx]+tu[xx][j])
                           {
                               tu[i][j]=tu[i][xx]+tu[xx][j];
                           }
                        }
                    }
                }
                else
                {
                    scanf("%d%d",&xx,&yy);
                    if(h[xx]==0||h[yy]==0)
                    {
                        printf("City %d or %d is not available.
    ",xx,yy);
                        continue;
                    }
                    if(tu[xx][yy]==inf)
                    {
                        printf("No such path.
    ");
                    }
                    else printf("%d
    ",tu[xx][yy]);
                }
            }
            printf("
    ");
        }
        return 0;
    }

    H(Hello World!)

    #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <queue>
    #include <vector>
    #include <algorithm>
    #define inf 0x3f3f3f3f
    using namespace std;
    int n;
    struct node
    {
        int l,r;
    }q[1000010];
    int main()
    {
        int K=0;
        bool F;
        int l,r,d1,d2;
        while(scanf("%d",&n)&&n!=0)
        {
            printf("Case %d:
    ",++K);
            for(int i=0;i<n;i++)
            {
                scanf("%d%d",&q[i].l,&q[i].r);
            }
            for(int i=0;i<n;i++)
            {
                l=-1;
                r=-1;
                d1=q[i].l;
                d2=q[i].r;
                F=true;
                for(int i=0;i<n;i++)
                {
                    if(q[i].l>d1&&q[i].r>d2)
                    {
                        if(F)
                        {
                          l=q[i].l;
                          r=q[i].r;
                          F=false;
                        }
                        else
                        {
                            if(l>q[i].l)
                            {
                               l=q[i].l;
                               r=q[i].r;
                            }
                            else if(l==q[i].l&&r>q[i].r)
                            {
                                r=q[i].r;
                            }
                        }
    
                    }
                }
                printf("%d %d
    ",l,r);
            }
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    mybatis plus使用redis作为二级缓存
    netty无缝切换rabbitmq、activemq、rocketmq实现聊天室单聊、群聊功能
    netty使用EmbeddedChannel对channel的出入站进行单元测试
    记jdk1.8中hashmap的tableSizeFor方法
    Cannot find class: BaseResultMap
    windows下远程访问Redis,windows Redis绑定ip无效,Redis设置密码无效,Windows Redis 配置不生效,Windows Redis requirepass不生效,windows下远程访问redis的配置
    学习记录
    eclipse的注释
    转:聊聊同步、异步、阻塞与非阻塞
    点滴笔记(二):利用JS对象把值传到后台
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/3796897.html
Copyright © 2011-2022 走看看