2023年百度之星程式設計大賽試題初賽題目 題3

2021-06-06 12:37:02 字數 2553 閱讀 7815

第三題(共四題 100 

分):字串替換( 

30 分) 

題目描述:請編寫程式,根據指定的對應關係,把乙個文字中的字串替換成另外的字串。 

輸入資料:程式讀入已被命名為 text.txt 

和 dict.txt 

的兩個輸入資料文字檔案, 

text.txt 

為乙個包含大量字串(含中文)的文字,以 

whitespace 

為分隔符; 

dict.txt 

為表示字串( 

s1 )與字串( 

s2 )的對應關係的另乙個文字(含中文),大約在 

1 萬行左右,每行兩個字串(即 

s1 和 

s2 ),用乙個 

\t 或空格分隔。 

dict.txt 

中各行的 

s1 沒有排序,並有可能有重複,這時以最後出現的那次 

s1 所對應的 

s2 為準。 

text.txt 

和 dict.txt 

中的每個字串都可能包含除 

whitespace 

之外的任何字元。 

text.txt 

中的字串必須和 

dict.txt 

中的某 

s1 text.txt 

和 dict.txt 

檔案,實際執行時我們會使用不同內容的輸入檔案。) 

輸出資料:在標準輸出上列印 text.txt 

被 dict.txt 

替換後了的整個文字。 

評分標準:程式輸出結果必須正確,記憶體使用越少越好,程式的執行時間越快越好。

my answer:

這題又想多了,什麼字典樹的,後來用了map對映就好了。

如果單詞之間有多個空格的情況沒有考慮

沒想到什麼空間或者時間上的優化

必須要用fin1和fin2分別開啟兩個檔案,不知道為什麼

#include #include #include #include using namespace std;

mapm;

int main()

fin1.close();

bool flag = 0;

fin2.open("text.txt");

while(fin2>>word)

}; int n, m;

pairlist[100000];

char word[100001];

char* get_word()

int main()

stable_sort(list, list + n, word_less());

freopen("text.txt", "r", stdin);

m = 0;

while (scanf("%s", word) > 0)

printf("\n");

return 0;

}

牛b樓天城的比賽答題原始碼:

終於有一題目是看懂了的,用的是自己寫的hash,大概這樣比較省空間,考慮到了單詞之間有多個空格、tab、換行的情況

#include #include #include //buf 

const int bufsize=128*1024;

int bufl,bufp;

char buf[bufsize];

char readchar()

return buf[bufp++];

} //data

const int max_strlen=512*1024;

const int hashsize=30011;

struct thashpoint

; char lines[max_strlen],*s1,*s2;

file *f;

thashpoint *hash[hashsize];

bool read_str()

return false;

} int hashtable_function(char *s)

void hashtable_insert()

p=new thashpoint;

p->s1=new char[strlen(s1)+1];

p->s2=new char[strlen(s2)+1];

strcpy(p->s1,s1);

strcpy(p->s2,s2);

p->next=hash[address];

hash[address]=p;

} void print(char *s)

printf("%s",s);

} void init_hashtable()

int main()

else

lines[l++]=c;

lines[l]=0;

print(lines);

return 0;

}

2023年百度之星程式設計大賽試題初賽題目 題1

第一題 共四題 100 分 連續正整數 10 分 題目描述 乙個正整數有可能可以被表示為 n n 2 個連續正整數之和,如 15 1 2 3 4 5 15 4 5 6 15 7 8 請編寫程式,根據輸入的任何乙個正整數,找出符合這種要求的所有連續正整數序列。輸入資料 乙個正整數,以命令列引數的形式提...

2005「百度之星」程式設計大賽網上決賽試題

第一題 共兩題100分 站點統計 50分 題目描述 s 1 2 3 4 1 4 0 3 2 3 4 5 3 2 2 2 4 6 1 4 其中與s site 同行和同列的數字都表示站點號,其他每個數字表示乙個站點到另乙個站點的超文字鏈結數。如果站點a有到另乙個站點b的直接鏈結或間接 指通過乙個或多個直...

2023年百度之星程式設計大賽試題初賽第一題

第一題 共四題 100 分 連續正整數 10 分 題目描述 乙個正整數有可能可以被表示為 n n 2 個連續正整數之和,如 15 1 2 3 4 5 15 4 5 6 15 7 8 請編寫程式,根據輸入的任何乙個正整數,找出符合這種要求的所有連續正整數序列。輸入資料 乙個正整數,以命令列引數的形式提...