zoukankan      html  css  js  c++  java
  • 2015 HIAST Collegiate Programming Contest F

    Contestants Ranking

    题意:Ahmad是最厉害的acmer,他的排名是0,所有与他组队打比赛的人的排名都是1,没有和他组过队但是和排名为1的人组过对的人排名为2,以此类推求出所有可以求得排名的人的排名,按排名小到大的顺序输出,如果排名相同按字典序小到大输出,最后按名字字典序小到达输出不能求得排名的

    思路:暴力依次求出排名为1,2,3.。。。当求排名为3的时候,如果某人的排名为1,则这个人的答案不更新,Ahmad的排名不更新,求出所有答案后放入set[i]数组里,i用来标记排名,最后输出答案

    AC代码:

    #include "iostream"
    #include "string.h"
    #include "stack"
    #include "queue"
    #include "string"
    #include "vector"
    #include "set"
    #include "map"
    #include "algorithm"
    #include "stdio.h"
    #include "math.h"
    #define ll long long
    #define bug(x) cout<<x<<" "<<"UUUUU"<<endl;
    #define mem(a) memset(a,0,sizeof(a))
    #define mp(x,y) make_pair(x,y)
    using namespace std;
    const long long INF = 1e18+1LL;
    const int inf = 1e9+1e8;
    const int N=1e5+100;
    
    ///2015 HIAST Collegiate Programming Contest
    ///FFFF
    
    set<string> se[305];
    map<string,int> ans,M;
    map<int,string> Mb;
    string s1,s2,s3,s0[105][5];
    int t,n;
    int main(){
        cin>>t;
        while(t--){
            cin>>n;
            int cnt=0;
            ans.clear();
            Mb.clear();
            M.clear();
            for(int i=0; i<=303; ++i) se[i].clear();
            ans["Ahmad"]=0;
            for(int i=1; i<=n; ++i){
                cin>>s1>>s2>>s3;
                s0[i][1]=s1,s0[i][2]=s2,s0[i][3]=s3;
                M[s1]=++cnt,Mb[cnt]=s1;
                M[s2]=++cnt,Mb[cnt]=s2;
                M[s3]=++cnt,Mb[cnt]=s3;
                if(s1=="Ahmad"){
                    ans[s2]=1,ans[s3]=1;
                }
                else if(s2=="Ahmad"){
                    ans[s1]=1,ans[s3]=1;
                }
                else if(s3=="Ahmad"){
                    ans[s1]=1,ans[s2]=1;
                }
            }
            int rk=1;
            while(rk<300){
                for(int i=1; i<=cnt; i++){
                    string s=Mb[i];
                    if(ans[s]==rk){
                        for(int i=1; i<=n; ++i){
                            if(s0[i][1]==s){
                                if(!ans[s0[i][2]] && s0[i][2]!="Ahmad") ans[s0[i][2]]=rk+1;
                                if(!ans[s0[i][3]] && s0[i][3]!="Ahmad") ans[s0[i][3]]=rk+1;
                            }
                            if(s0[i][2]==s){
                                if(!ans[s0[i][1]] && s0[i][1]!="Ahmad") ans[s0[i][1]]=rk+1;
                                if(!ans[s0[i][3]] && s0[i][3]!="Ahmad") ans[s0[i][3]]=rk+1;
                            }
                            if(s0[i][3]==s){
                                if(!ans[s0[i][1]] && s0[i][1]!="Ahmad") ans[s0[i][1]]=rk+1;
                                if(!ans[s0[i][2]] && s0[i][2]!="Ahmad") ans[s0[i][2]]=rk+1;
                            }
                        }
                    }
                }
                rk++;
                int f=1;
                for(int i=1; i<=cnt; i++){
                    string s=Mb[i];
                    if(!ans[s] && s!="Ahmad"){
                        f=0;
                        break;
                    }
                }
                if(f) break;
            }
            for(int i=1; i<=cnt; ++i){
                string s=Mb[i];
                if(ans[s]==0) ans[s]=302;
            }
            ans["Ahmad"]=0;
            for(int i=0; i<=cnt; ++i){
                string s=Mb[i];
                se[ans[s]].insert(s);
            }
            cout<<M.size()<<endl;
            if(M["Ahmad"]) cout<<"Ahmad"<<" "<<0<<endl;
            for(int i=1; i<300; ++i){
                if(se[i].size()==0) break;
                set<string>::iterator it;
                for(it=se[i].begin(); it!=se[i].end(); it++){
                    cout<<(*it)<<" "<<i<<endl;
                }
            }
            set<string>::iterator it;
            for(it=se[302].begin(); it!=se[302].end(); it++){
                cout<<(*it)<<" "<<"undefined"<<endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    SVG ViewBox
    svg中改变class调用的线条颜色
    SVG 箭头线绘制
    Spring3中的mvc:interceptors标签配置拦截器
    MyBatis入门学习
    MyBatis 配置sql语句输出
    使用iBATIS3.0完成增删改查
    iBatis简单入门教程
    SpringMVC常用注解,返回方式,路径匹配形式,验证
    springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
  • 原文地址:https://www.cnblogs.com/max88888888/p/7161895.html
Copyright © 2011-2022 走看看