题解 P5833 【[USACO19DEC]Livestock Lineup B】

· · 题解

先输入,然后字典序排序,由于n<=7,就把所有可能全排一遍,然后判断是否符合规则,符合输出,不符合继续,我用了STL。

不多说,上题解!

#include<bits/stdc++.h>
using namespace std;
vector <string> cows,st_a,st_b; 
int n;
int find(string c)
{
    for(int i=0;i<8;i++)
    {
        if(cows[i]==c) return i;
    }
    return -1;
}
bool sati()
{
    for(int i=0;i<n;i++)
    {
        if(abs(find(st_a[i])-find(st_b[i]))!=1) return false;
    }
    return true;
}
int main()
{
    cows.push_back("Beatrice");
    cows.push_back("Belinda");
    cows.push_back("Bella");
    cows.push_back("Bessie");
    cows.push_back("Betsy");
    cows.push_back("Blue");
    cows.push_back("Buttercup");
    cows.push_back("Sue");
    cin>>n;
    string a,b,t;
    for(int i=0;i<n;i++)
    {
        cin>>a;
        cin>>t;
        cin>>t;
        cin>>t;
        cin>>t;
        cin>>b;
        st_a.push_back(a);
        st_b.push_back(b);
    }
    do{
        if(sati()){
            for(int i=0;i<8;i++) cout<<cows[i]<<endl;
            break;
        }
    }
    while(next_permutation(cows.begin(),cows.end()));
return 0;
}

希望能过!

记得点个赞!