HDU——1116 Play on words

題目大意

這個題讓我們求給出的幾個字符串是否能全部首尾相連义屏,字符串長度至少為2,其連接方式類似于成語接龍蜂大,需要一個字符串的尾巴與第二個字符串開頭相同闽铐。

樣例輸入

3
2
acm
ibm
3
acm
malform
mouse
2
ok
ok

樣例輸出

The door cannot be opened.
Ordering is possible.
The door cannot be opened.

題目分析

這題是個歐拉回路和并查集的結(jié)合。因為我是菜鳥還不是很懂歐拉回路就不在此贅述奶浦,日后理解后再詳細寫兄墅。
先說說我的想法:
1.將每個輸入的字符串的首字母與尾字母的入度和出度分別加一,分別放在in[]與out[]數(shù)組中澳叉。并記錄出現(xiàn)過的字母(只記錄首位)隙咸。

2.判定其是否滿足題目所給的條件相連即只有一個字母入度減出度為1,一個字母入度減出度為-1成洗,剩下的入度減去出度都為0五督。若不滿足直接退出。

3.剩下的就判斷其是否有連通性瓶殃,我使用并查集的時候?qū)ather數(shù)組的根節(jié)點位置記錄為他節(jié)點的個數(shù)并以負數(shù)表示充包。然后每輸入一個字符串將首尾字母合并,而若是首尾字母相同遥椿,則不合并基矮。這樣若形成的是鏈而不是環(huán)的話,father數(shù)組中最小的值(因為是負數(shù))就與輸入的字符串首尾字母出現(xiàn)的個數(shù)相同冠场。
若相同則判斷可行家浇,反之不行。

(好吧可能我的敘述方式有點問題慈鸠,還是把代碼貼出來蓝谨,講道理代碼也丑)

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int pre[30];
int in[30],out[30],n,ans[30];// ans用來記錄in與out相減的值。
char word[1010];
int judge[30];  //判斷字母是否出現(xiàn)過青团,出現(xiàn)過為1,否則為0咖楣。

int Find(int x)
{
    if(pre[x] < 0) return x;
    return pre[x] = Find(pre[x]);
}

int Union(int R1 , int R2)
{
    int r1 = Find(R1) , r2 = Find(R2);
    int temp = pre[r1] + pre[r2];
    if(pre[r1] > pre[r2])
    {
        pre[r1] = r2; pre[r2] = temp;
    }
    else
    {
        pre[r2] = r1 ; pre[r1] = temp;
    }
}

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        memset(in,0,sizeof(in));
        memset(out,0,sizeof(out));
        memset(word,0,sizeof(word));
        memset(judge,0,sizeof(judge));
        memset(pre,-1,sizeof(pre));
        scanf("%d",&n);
        for(int i = 1 ; i <= n ;i++)
        {
            scanf("%s",word);
            int len = strlen(word);
            judge[word[0]-'a'+1]=1 ;
            judge[word[len-1]-'a'+1]=1;//將首尾字母記錄為出現(xiàn)過督笆。

            in[word[0]-'a'+1]++;
            out[word[len-1]-'a'+1]++;
            if(Find(word[0]-'a'+1) != Find(word[len-1]-'a'+1))
            {
                Union(word[0]-'a'+1,word[len-1]-'a'+1);   //若首尾字母不同則合并。
            }
        }
        for(int i = 0 ; i < 30 ; i++)
        {
            ans[i] = in[i] - out[i];         //將所有字母入度和出度的值記錄下來诱贿。
        }
        int co1 = 0 , co2 = 0 , flag = 1;
        for(int i = 0 ; i < 30 ; i++)        //從這里開始判斷是否只有一個-1娃肿,一個1咕缎,其余全為0的情況。
        {
            if(ans[i]!=0&&ans[i]!=-1&&ans[i]!=1)
            {
                flag = 0;
                break;
            }
            if(ans[i]==-1)
            {
                co1++;
                if(co1 > 1)
                {
                    flag = 0;
                    break;
                }
            }
            if(ans[i]==1)
            {
                co2++;
                if(co2>1)
                {
                    flag = 0; break;
                }
            }
        }
        if(flag == 0)                          //不滿足則退出
        {
            printf("The door cannot be opened.\n"); continue;
        }
        int con = 0;
        for(int i = 0 ; i < 30  ; i++)          //記錄出現(xiàn)過字母的個數(shù) 料扰。
        {
            if(judge[i]) con++;
        }
        flag = 0;
        for(int i = 0 ; i < 30 ; i++)            //判斷與最長鏈的節(jié)點個數(shù)是否相等凭豪。
        {
             if(pre[i]==(-1)*con)
             {
                 flag = 1;break;
             }
        }
        if(flag == 1) printf("Ordering is possible.\n");
        else printf("The door cannot be opened.\n");


    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市晒杈,隨后出現(xiàn)的幾起案子嫂伞,更是在濱河造成了極大的恐慌,老刑警劉巖拯钻,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帖努,死亡現(xiàn)場離奇詭異,居然都是意外死亡粪般,警方通過查閱死者的電腦和手機拼余,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亩歹,“玉大人匙监,你說我怎么就攤上這事⌒∽鳎” “怎么了舅柜?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長躲惰。 經(jīng)常有香客問我致份,道長,這世上最難降的妖魔是什么础拨? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任氮块,我火速辦了婚禮,結(jié)果婚禮上诡宗,老公的妹妹穿的比我還像新娘滔蝉。我一直安慰自己,他們只是感情好塔沃,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布蝠引。 她就那樣靜靜地躺著,像睡著了一般蛀柴。 火紅的嫁衣襯著肌膚如雪螃概。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天鸽疾,我揣著相機與錄音吊洼,去河邊找鬼。 笑死制肮,一個胖子當著我的面吹牛冒窍,可吹牛的內(nèi)容都是我干的递沪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼综液,長吁一口氣:“原來是場噩夢啊……” “哼款慨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谬莹,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤檩奠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后届良,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笆凌,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年士葫,在試婚紗的時候發(fā)現(xiàn)自己被綠了乞而。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡慢显,死狀恐怖爪模,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荚藻,我是刑警寧澤屋灌,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站应狱,受9級特大地震影響共郭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疾呻,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一除嘹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧岸蜗,春花似錦尉咕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至铃慷,卻和暖如春单芜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枚冗。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工缓溅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赁温。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓坛怪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親股囊。 傳聞我的和親對象是個殘疾皇子袜匿,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 本文借鑒大神博客歐拉環(huán)與歐拉路徑的判斷求法 定義:一個有向圖是半歐拉圖當且僅當該圖的基圖是連通的且有且只有一個點的...
    簡為2016閱讀 330評論 0 0
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,233評論 0 4
  • (一) 印象中她一直都很果斷堅強,如果放在古代那就是花木蘭稚疹,甚至有些時候我覺得她比花木蘭還多了一分硬氣居灯。所以我很少...
    吃藕菇?jīng)?/span>閱讀 252評論 0 0
  • 在《戰(zhàn)狼2》上映的第四天,也弱弱地去捧了個票房内狗。據(jù)說這部電影的口碑和票房都已經(jīng)瘋了——上映4小時票房近億怪嫌,26小時...
    賢兒玥兒閱讀 406評論 3 10
  • 網(wǎng)戀是一罐冰鎮(zhèn)可樂(二) 楊旭結(jié)婚的時候,我正拿著簡歷奔走在上海的街頭柳沙,楊旭和老婆感情出現(xiàn)問題的時候岩灭,我正和八哥在...
    Yolanda0316閱讀 399評論 0 3