第三題(共四題 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 請編寫程式,根據輸入的任何乙個正整數,找出符合這種要求的所有連續正整數序列。輸入資料 乙個正整數,以命令列引數的形式提...