浙江省赛C What Kind of Friends Are You?(MAP)

Posted 小九

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浙江省赛C What Kind of Friends Are You?(MAP)相关的知识,希望对你有一定的参考价值。

题目http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3960

题意:对01矩阵中第i行j个数 1表示第j个问题中的名字和c个已知名字取交集 

    0表示已知名字去除第j个问题中的名字

    问对于矩阵中i行 是否存在q个问题中的名字和c个已知名字的元素个数为1的交集

    若有输该名字 否则输出Let‘s go to the library!!

路:将第i个问题中的Yes数值化为1<<i(压位 相当于转化为二进制数后左移i位) 这样可以保证c中名字有唯一对应值 

    要让名字和值对应需要用到 STL中的map<string,int>

代码:

技术分享
#include<bits/stdc++.h>
using namespace std;

int main(){
    string s,s0;
    int t,n,q,c,m,a;
    map<string,int> mp;
    map<string,int>::iterator it;

    cin>>t;
    while(t--){
        mp.clear();
        cin>>n>>q;
        cin>>c;
        for(int i=0;i<c;i++){
            cin>>s0;
            mp[s0]=0;//需初始化 否则会WA
        }
        for(int i=0;i<q;i++){
            cin>>m;
            for(int j=0;j<m;j++){
                cin>>s;
                mp[s]+=1<<i;
            }
        }
        for(int i=0;i<n;i++){
            int sum=0;
            for(int j=0;j<q;j++){
                cin>>a;
                if(a==1)
                    sum+=1<<j;
            }
            int cnt=0;
            string name;

            for(it=mp.begin();it!=mp.end();it++){//遍历图 是否存在唯一对应值
                if(it->second==sum){
                    name=it->first;
                    cnt++;
                }
            }
            if(cnt==1)
                cout<<name<<endl;
            else
                cout<<"Let‘s go to the library!!"<<endl;
        }
    }
    return 0;
}
View Code

 

    

    

 


以上是关于浙江省赛C What Kind of Friends Are You?(MAP)的主要内容,如果未能解决你的问题,请参考以下文章

ZOJ What Kind of Friends Are You?

zoj 3960 What Kind of Friends Are You?(哈希)

ZOJ 3960 What Kind of Friends Are You?(读题+思维)

ZOJ 3960: What Kind of Friends Are You?

ZJCPC2022 第19届 浙江省赛The 19th Zhejiang Provincial Collegiate Programming Contest(CBALGMIF 8题)

ZJCPC2022 第19届 浙江省赛The 19th Zhejiang Provincial Collegiate Programming Contest(CBALGMIF 8题)