略注意點:1.字首和字尾的公共部分應該選最短的。2.如果兩個字串字首和字尾的公共部分恰好是其中乙個字串,那麼這兩個字串不能合併。
1 #include 2view codeusing
namespace
std;34
#define rep(i,n) for (int i = 0; i < (n); ++i)
5#define for(i,s,t) for (int i = (s); i <= (t); ++i)
6#define rfor(i,t,s) for (int i = (t); i >= (s); --i)
7#define foreach(i,c) for (__typeof(c.begin()) i = c.begin(); i != c.end(); ++i)
8#define rforeach(i,c) for (__typeof(c.rbegin()) i = c.rbegin(); i != c.rend(); ++i)910
#define pr(x) cout << #x << " = " << x << " "
11#define prln(x) cout << #x << " = " << x << endl
1213
#define all(x) x.begin(),x.end()
14#define ins(x) inserter(x,x.begin())
1516
#define ms0(a) memset(a,0,sizeof(a))
17#define msi(a) memset(a,inf,sizeof(a))
1819
#define pii pair20
#define piii pair,int>
21#define mp make_pair
22#define pb push_back
23#define fi first
24#define se second
2526 inline int
gc()
3334 inline int
ri()
4041 typedef long
long
ll;42
const
int maxn = 1e5 + 7;43
44int
n, ans;
45string str[21
];46 vector< pii > nexts[21
];47
int cnt[21
];48
string
st;49
50//
common prefix and suffix
51int cps(int x, int
y) 59 --i;
60 ++j;61}
62if(ret == str[x].size() || ret == str[y].size()) ret = 0;63
return
ret;64}
6566
void dfs(int x, int
ret)
79if(flag) ans =max(ans, ret);80}
8182
intmain()91}
92 for(j, 1
, n)
95 dfs(0, 0
);96
97 printf("
%d\n
", ans);
98return0;
99 }
NOIP2000 提高組 複賽 進製轉換
noip2000 提高組 複賽 進製轉換 1.該題難在弄懂樣例,負進製,餘數為 0 2.試了一下,程式自帶的 發現對負進製轉換無用,得自個寫一套。3.弄懂了 15轉 2進製,餘數 0,商正負都可以。模擬如下 15除 2 8餘1 8除 2 4餘0 4除 2 2餘0 2除 2 1餘0 1除 2 1餘1 ...
NOIP 2000 提高組 複賽 單詞接龍
noip 2000 提高組 複賽 單詞接龍 1.程式編寫過程中,發現接龍處的判斷編寫有誤,馬上著手修改。2.樣例通過,提交40分,錯了測試點1 4.輸入 1envelopee 輸出 154.上述測試點是挺經典的,不容易考慮到。envelope envelope 拼接成envelopenvelope ...
NOIP 2023年提高組複賽 單詞接龍
說起這道題就心酸,幾個資料特別坑,幾分鐘寫完的程式花了乙個上午除錯bug,吐槽完畢,進入正題 1,需要建立乙個標記陣列vis表示當前單詞被採取的次數 2,for迴圈中找到每乙個符合條件的龍頭,初始化標記陣列後進行深度優先搜尋 3,因為連線起來的單詞要最長,所以對比是選擇從上乙個單詞的末尾與當前單詞的...