UVA 11732,uva11732

來源:互聯網
上載者:User

UVA 11732,uva11732
UVA 11732 - strcmp() Anyone?

題目連結

題意:給定一些字串,要求兩兩比較,需要比較的總次數(注意,如果一個字元相同,實際上要還要和'\0'比一次,相當比2次)

思路:建Trie樹,每次建樹過程中,後繼後繼結點就是相同結點需要比較兩次ans + val * 2,否則就是不同結點ans + val,建完樹就計算完了

代碼:

#include <cstdio>#include <cstring>const int N = 1005;const int MAXN = 4000005;int n;char str[N];long long ans;struct Node {    char c;    int val;} node[MAXN];int first[MAXN], next[MAXN], sz;void init() {    ans = 0;    sz = 1;    first[0] = 0; next[0] = 0; node[0].val = 0;}void insert(char *str) {    int u = 0, len = strlen(str);    for (int i = 0; i <= len; i++) {bool flag = true;int v, tmp;for (v = first[u]; v; v = next[v]) {    if (node[v].c == str[i]) {tmp = v;flag = false;ans += node[v].val * 2;    }    else ans += node[v].val;}if (flag) {    v = sz++;    node[v].c = str[i];    node[v].val = 0;    first[v] = 0;    next[v] = first[u];    first[u] = v;}else v = tmp;u = v;node[u].val++;    }}int main() {    int cas = 0;    while (~scanf("%d", &n) && n) {init();while (n--) {    scanf("%s", str);    insert(str);}printf("Case %d: %lld\n", ++cas, ans);    }    return 0;}





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.