南陽理工OJ 99 單詞拼接(尤拉通路)

2021-09-01 17:12:51 字數 1393 閱讀 4818

連線:

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:5

描述

給你一些單詞,請你判斷能否把它們首尾串起來串成一串。

前乙個單詞的結尾應該與下乙個單詞的道字母相同。

如aloha

dogarachnid

gopher

tiger

rat

輸入

第一行是乙個整數n(0輸出

如果存在拼接方案,請輸出所有拼接方案中字典序最小的方案。(兩個單詞之間輸出乙個英文句號".")

如果不存在拼接方案,則輸出

***樣例輸入

2

6aloha

arachnid

doggopher

rattiger

3oak

maple

elm

樣例輸出

aloha.arachnid.dog.gopher.rat.tiger

***

剛學了尤拉通路準備找題練手,就悲劇的找到了這個。雖然用思想挺簡單,但是題目要求要按字典序排列,讓我除錯的好辛苦啊!最後沒有辦法還是找了位大牛(piaoyi)幫忙。

貼下又爛又長的**:

#include#include#include#include#include#includeusing namespace std;

const int maxcolor=26;

int g[maxcolor+1][maxcolor+1];

vectorans;//存放結果陣列

priority_queue, greater>mm[maxcolor+1][maxcolor+1];//按字典序排

int abs(int x)

void euler(int u)}}

if(flag)//繼續深搜字典序最小的

}}int f()//找起點函式

res+=abs(chu-ru);

if(chu>ru)start=i;//如果是半尤拉圖,起點就是出度大一點的那個單詞

}if(res>2)return -1;//如果不構成尤拉路,就跳出

return start;

}int main()

start=f();

if(start==-1)

ans.clear();

euler(start);

if((int)ans.size()!=n)//如果單詞沒有找完,說明不連通,就輸出***

for(int i=ans.size()-1;i>=0;i--)//輸出結果

cout<}

return 0;

}

南陽理工oj6題

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現有一塊草坪,長為20公尺,寬為2公尺,要在橫中心線上放置半徑為ri的噴水裝置,每個噴水裝置的效果都會讓以它為中心的半徑為實數ri 0 輸入 第一行m表示有m組測試資料 每一組測試資料的第一行有乙個整數數n,n表示共有n個噴水裝...

南陽理工oj 整數劃分(DP)

問題是我們經常見到的整數劃分,給出兩個整數 n m 要求在 n 中加入m 1 個乘號,將n分成m段,求出這m段的最大乘積輸入 第一行是乙個整數t,表示有t組測試資料 接下來t行,每行有兩個正整數 n,m 1 n 10 19,0 m n的位數 輸出 輸出每組測試樣例結果為乙個整數佔一行 樣例輸入 2 ...

南陽理工OJ91 階乘之和

include int helper 100 void getmultiply 根據備忘錄求解遞迴表 int getresult int n 獲取結果 int getindex int n 取得離輸入的值最近的且小於的數的位置 int main else return 0 void getmulti...