• hdu 4039 暴力


    思路:用map将每个字符串与一个数字进行对应,然后暴力统计就好了

    #include<cstring>
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<map>
    #include<vector>
    #include<string>
    #define Maxn 2010
    using namespace std;
    int fr[Maxn][Maxn],mul[Maxn][Maxn],Max[Maxn];
    char str[Maxn][20];
    map<string,int> g;
    vector<int> head[Maxn*2];
    vector<int> ans[Maxn*2];
    int cmp(int a,int b)
    {
        return strcmp(str[a],str[b])<0;
    }
    int main()
    {
        int t,n,q,i,j,k,Case=0,u,v;
        scanf("%d",&t);
        char s1[20],s2[20];
        while(t--)
        {
            memset(fr,0,sizeof(fr));
            memset(mul,0,sizeof(mul));
            memset(Max,0,sizeof(Max));
            g.clear();
            scanf("%d%d",&n,&q);
            for(i=0;i<=2*n;i++)
                head[i].clear(),ans[i].clear();
            int cnt=0;
            for(i=1;i<=n;i++)
            {
                scanf("%s %s",&s1,&s2);
                if(!g[s1]){
                    g[s1]=++cnt;
                    strcpy(str[cnt],s1);
                }
                if(!g[s2]){
                    g[s2]=++cnt;
                    strcpy(str[cnt],s2);
                }
                u=g[s1],v=g[s2];
                head[u].push_back(v);
                head[v].push_back(u);
                fr[u][v]=fr[v][u]=1;
            }
            int sz;
            for(i=1;i<=cnt;i++){
                sz=head[i].size();
                for(j=0;j<sz;j++){
                    u=head[i][j];
                    int ss=head[u].size();
                    for(k=0;k<ss;k++){
                        v=head[u][k];
                        if(!fr[i][v]&&i!=v)
                            mul[i][v]++,Max[i]=max(Max[i],mul[i][v]);
                    }
                }
            }
            for(i=1;i<=cnt;i++){
                for(j=1;j<=cnt;j++){
                    if(j==i) continue;
                    if(mul[i][j]==Max[i]&&Max[i])
                        ans[i].push_back(j);
                }
                sort(ans[i].begin(),ans[i].end(),cmp);
            }
            printf("Case %d:
    ",++Case);
            //cout<<q<<endl;
            for(i=1;i<=q;i++){
                scanf("%s",s1);
                u=g[s1];
                if(ans[u].empty())
                printf("-");
                else{
                    sz=ans[u].size();
                    v=ans[u][0];
                    printf("%s",str[v]);
                    for(j=1;j<sz;j++){
                        v=ans[u][j];
                        printf(" %s",str[v]);
                    }
                }
                printf("
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    mysql参数优化
    看见的一个mysql面试题
    面向对象的继承
    面向对象的权限修饰符
    php实现无限极分类
    php的冒泡排序
    frame框架的跳转
    thinkphp中open路径问题
    mysql触发器
    mysql事务
  • 原文地址:https://www.cnblogs.com/wangfang20/p/3275710.html
Copyright © 2020-2023  润新知