Airport Announcements URAL - 1889

題目描述:這哥們在機場聽公告,假設機場說的公告每種語言含有的短語數是相同的,他有的詞能聽出什麼語言,有的詞聽不出就是“unknown”,問一共有多少種語言,多種滿足情況按照從大到下的順序輸出。
解題分析:簡單模擬就好,沒什麼難度。

代碼如下:

#include <cstdio>
#include <string>
#include <iostream>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
using namespace std;
vector <string> phrase;
int n;
set <int> ans;

bool solve(int m)
{
    set <string> lang;
    for(int i=0; i<n; i+=m)
    {
        string  cur;
        for(int j=0; j<m; j++)
        {
            if(phrase[i+j]!="unknown")
            {
                if(cur.empty())
                {
                    cur=phrase[i+j];
                }
                else
                {
                    if(cur!=phrase[i+j]) return false;
                }
            }
        }
        if(!cur.empty())
        {
            if(!lang.count(cur))
            {
                lang.insert(cur);
            }
            else
            {
                return false;
            }
        }
    }
    return true;
}

int main()
{
    string str;
    scanf("%d",&n);
    for(int i=0; i<n; i++)
    {
        cin >> str;
        phrase.push_back(str);
    }
    for(int i=1; i<=n; i++)
    {
        if(n%i==0)
            if(solve(i)) ans.insert(n/i);
    }
    if(ans.empty()) cout << "Igor is wrong." << endl;
    else
    {
        set <int >::iterator it;
        for(it=ans.begin();it!=ans.end();it++)
        {
            if(it==ans.begin()) cout << *it;
            else cout << " " << *it ;
        }
        cout << endl;
    }

    return 0;
}

//這是當初彬佬所寫,爲了省時間給每個字符串編了個號,但實際上這題數據很少,不耗時間,下面是不編號的代碼,和上面的時間相同。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
using namespace std;
vector <string> phrase;
int n;
set <int> ans;

bool solve(int m)
{
    set <string> lang;
    for(int i=0; i<n; i+=m)
    {
        string  cur;
        for(int j=0; j<m; j++)
        {
            if(phrase[i+j]!="unknown")
            {
                if(cur.empty())
                {
                    cur=phrase[i+j];
                }
                else
                {
                    if(cur!=phrase[i+j]) return false;
                }
            }
        }
        if(!cur.empty())
        {
            if(!lang.count(cur))
            {
                lang.insert(cur);
            }
            else
            {
                return false;
            }
        }
    }
    return true;
}

int main()
{
    string str;
    scanf("%d",&n);
    for(int i=0; i<n; i++)
    {
        cin >> str;
        phrase.push_back(str);
    }
    for(int i=1; i<=n; i++)
    {
        if(n%i==0)
            if(solve(i)) ans.insert(n/i);
    }
    if(ans.empty()) cout << "Igor is wrong." << endl;
    else
    {
        set <int >::iterator it;
        for(it=ans.begin();it!=ans.end();it++)
        {
            if(it==ans.begin()) cout << *it;
            else cout << " " << *it ;
        }
        cout << endl;
    }

    return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章