1139 First Contact (30 分)难度: 一般 / 知识点: 模拟

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1139 First Contact (30 分)难度: 一般 / 知识点: 模拟相关的知识,希望对你有一定的参考价值。


https://pintia.cn/problem-sets/994805342720868352/problems/994805344776077312
难倒是不难,但是有坑,例如-0000,0000故我们还是得用字符串来读入。
这里的话需要离散化一下,将字符串映射到一个值,这样的话可以直接用邻接矩阵来存边。

#include<bits/stdc++.h>
using namespace std;
vector<int>boys,girls;
unordered_map<string,int>hush;
unordered_map<int,string>val;//通过值找到原始的值。
int n,m,k,idx;
int g[1005][1005];
int get(string x)

    if(hush.count(x)==0) hush[x]=++idx;
    val[hush[x]]=x;
    return hush[x];

void solve(string a,string b)

    vector<int>ve1,ve2;
    vector<pair<int,int>>ans;
    if(a.size()==5) ve1=girls;
    else ve1=boys;
    if(b.size()==5) ve2=girls;
    else ve2=boys;
    int a1=get(a),b1=get(b);
    for(int i=0;i<ve1.size();i++)//暴力枚举
    
        for(int j=0;j<ve2.size();j++)
        
            int x=ve1[i],y=ve2[j];
            if(x==a1||x==b1||y==a1||y==b1) continue;
            if(g[a1][x]&&g[x][y]&&g[y][b1])
                ans.push_back(abs(stoi(val[x])),abs(stoi(val[y])));
        
    
    cout<<ans.size()<<endl;
    sort(ans.begin(),ans.end());
    for(int i=0;i<ans.size();i++) 
        printf("%04d %04d\\n",ans[i].first,ans[i].second);

int main(void)

    cin>>n>>m;
    for(int i=0;i<m;i++)
    
        string a,b; cin>>a>>b;
        int x=get(a),y=get(b);
        g[x][y]=g[y][x]=1;
        if(a.size()==4)  boys.push_back(x);
        else girls.push_back(x);
        if(b.size()==4)  boys.push_back(y);
        else girls.push_back(y);
    
    sort(boys.begin(),boys.end());
    boys.erase(unique(boys.begin(), boys.end()), boys.end());//去重
    sort(girls.begin(),girls.end());
    girls.erase(unique(girls.begin(), girls.end()), girls.end()); //去重
    cin>>k;
    while(k--)
    
        string a,b; cin>>a>>b;
        solve(a,b);
    
    return 0;

以上是关于1139 First Contact (30 分)难度: 一般 / 知识点: 模拟的主要内容,如果未能解决你的问题,请参考以下文章

1139 First Contact (30分) 题目详解

1139 First Contact (30 分)难度: 一般 / 知识点: 模拟

PAT1139First Contact (30)

Codeforces1139D_CF1139DSteps to One (Mobius_DP)

Entity Framework - CTP4 - Code First - 如何关闭自动复数?

Contact项目梳理