日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDOJ 1247 HDU 1247 Hat’s Words ACM 1247 IN HDU

發布時間:2023/12/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDOJ 1247 HDU 1247 Hat’s Words ACM 1247 IN HDU 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MiYu原創, 轉帖請注明 : 轉載自?______________白白の屋????

?

題目地址 :

?? ? http://acm.hdu.edu.cn/showproblem.php?pid=1247?

題目描述:

Hat’s Words

Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1384????Accepted Submission(s): 506


Problem DescriptionA hat’s word is a word in the dictionary that is the concatenation of exactly two other words in the dictionary.
You are to find all the hat’s words in a dictionary.

InputStandard input consists of a number of lowercase words, one per line, in alphabetical order. There will be no more than 50,000 words.
Only one case.

OutputYour output should contain all the hat’s words, one per line, in alphabetical order.
Sample Inputa ahat hat hatword hziee word
Sample Outputahat hatword

題目分析 :

??

?? ? ? ?字典樹的題目, 這個題的方法比較暴力, ?在輸入的時候將每個單詞都加入字典樹, ?并用數組將所有的串都存起來來.

在輸入完成后, ?對每個單詞進行拆分, 也就是暴力枚舉單詞不同位置的前后部分, 看在字典樹中是否存在, 存在即輸出.

不過貌似數據比較弱, 說是按字典順序輸出, 但其實他的輸入本就是按字典順序輸入的, 所以將排序也面了 , 呵呵.

?? ?另外,其實這題用STL 做更簡單, 當然追求效率除外.

trie 代碼:

?/*

MiYu原創, 轉帖請注明 : 轉載自 ______________白白の屋

?? ? ? ? ?http://www.cnblog.com/MiYu

Author By : MiYu

Test ? ? ?: 1

Program ? : 1247

*/


#include <iostream>

#include <algorithm>

#include <string>

using namespace std;

typedef struct dictor DIC;

DIC *root = NULL;

struct dictor {

?? ? ? dictor (){ exist = false; memset ( child , 0 , sizeof ( child ) ); }

?? ? ? void insert ( char *ins );

?? ? ? bool find ( const char *ins );

private:

?? ? ? DIC *child[26];

?? ? ? bool exist;?

};

void dictor::insert ( char *ins )

{

?? ? ? ? ? ?DIC *cur = root,*now;

?? ? ? ? ? ?int len = strlen ( ins );

?? ? ? ? ? ?for ( int i = 0; i < len; ++ i )

?? ? ? ? ? ?{

?? ? ? ? ? ? ? ? ?if ( cur->child[ ins[i] - 'a' ] != NULL )?

?? ? ? ? ? ? ? ? ?{

?? ? ? ? ? ? ? ? ? ? ? cur = cur->child[ ins[i] - 'a' ];

?? ? ? ? ? ? ? ? ?}

?? ? ? ? ? ? ? ? ?else

?? ? ? ? ? ? ? ? ?{

?? ? ? ? ? ? ? ? ? ? ? now = new DIC;

?? ? ? ? ? ? ? ? ? ? ? cur->child[ ins[i] - 'a' ] = now;

?? ? ? ? ? ? ? ? ? ? ? cur = now;

?? ? ? ? ? ? ? ? ?}

?? ? ? ? ? ?}?

?? ? ? ? ? ?cur->exist = true;

}

bool dictor::find ( const char *ins )

{

?? ? ? ? ? ?DIC *cur = root;

?? ? ? ? ? ?int len = strlen ( ins );

?? ? ? ? ? ?for ( int i = 0; i < len; ++ i )

?? ? ? ? ? ?{

?? ? ? ? ? ? ? ? if ( cur->child[ ins[i] - 'a' ] != NULL )

?? ? ? ? ? ? ? ? ? ? ?cur = cur->child[ ins[i] - 'a' ]; ?

?? ? ? ? ? ? ? ? else

?? ? ? ? ? ? ? ? ? ? ?return false;?

?? ? ? ? ? ?}?

?? ? ? ? ? ?return cur->exist;

}

char words[50050][100];

char s1[100],s2[100];

DIC dict;

int main ()

{

?? ?root = &dict;

?? ?int n = 0;

?? ?while ( scanf ( "%s",words[n] ) != EOF )

?? ?{

?? ? ? ? ? ?dict.insert ( words[n++] );

?? ?}

?? ?for ( int i = 0; i < n; ++ i )

?? ?{

?? ? ? ? ?int len = strlen ( words[i] );

?? ? ? ? ?for ( int j = 1; j < len; ++ j )

?? ? ? ? ?{

?? ? ? ? ? ? ? ?memset ( s1, 0, sizeof ( s1 ) );

?? ? ? ? ? ? ? ?memset ( s2, 0, sizeof ( s2 ) );

?? ? ? ? ? ? ? ?strncpy ( s1, words[i], j );

?? ? ? ? ? ? ? ?strcpy ( s2, words[i]+j );

?? ? ? ? ? ? ? ?if ( dict.find ( s1 ) && dict.find ( s2 ) )

?? ? ? ? ? ? ? ?{

?? ? ? ? ? ? ? ? ? ? printf ( "%s\n", words[i] );

?? ? ? ? ? ? ? ? ? ? break;?

?? ? ? ? ? ? ? ?}

?? ? ? ? ?} ?

?? ?} ?

?? ?//system ( "pause" );

?? ?return 0;

}


STL ?代碼 :

?

?/*

MiYu原創, 轉帖請注明 : 轉載自 ______________白白の屋

?? ? ? ? ?http://www.cnblog.com/MiYu

Author By : MiYu

Test ? ? ?: 2

Program ? : 1247

*/


#include <iostream>

#include <string>

#include <map>

using namespace std;

map < string , int > mp;

string str[50005];

int main ()

{

?? ?int n = 0;

?? ?while ( cin >> str[n] ) mp[ str[n++] ] = 1;

?? ?for ( int i = 0; i < n; ++ i )

?? ?{

?? ? ? ? ?unsigned len = str[i].size ();

?? ? ? ? ?for ( unsigned j = 1; j < len; ++ j )

?? ? ? ? ?{

?? ? ? ? ? ? ? string s1 ( str[i], 0, j );

?? ? ? ? ? ? ? string s2 ( str[i], j );

?? ? ? ? ? ? ? if ( mp[s1] == 1 && mp[s2] == 1 )

?? ? ? ? ? ? ? {

?? ? ? ? ? ? ? ? ? ?cout << str[i] << endl;?

?? ? ? ? ? ? ? ? ? ?break;

?? ? ? ? ? ? ? }

?? ? ? ? ?}?

?? ?}

?? ?return 0;

}


?

?

轉載于:https://www.cnblogs.com/MiYu/archive/2010/08/24/1807147.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的HDOJ 1247 HDU 1247 Hat’s Words ACM 1247 IN HDU的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。