很久未曾刷題,凌晨睡不着,找了道比較簡單的練下手,久違的AC感受,等這陣子忙完等級考試、比賽、論文的一堆破事,就全心投入刷題,準備PAT考試中去,再參加最後一次校賽。其實挺後悔沒入校隊的,真想到區域賽看看,真難過如今,想哭。往事已矣,立足當下,自勉,寫完到A協睡覺去。ios
比賽描述編輯器
輸入函數
多行,每行以 # 爲結束,第1行爲一段英文文字(單詞數、數字很少於500),其他行是待搜索的英文短語(單詞數很少於10)。這裏英文文字、英文短語只包含英文單詞,這些單詞以空格分隔。測試
輸出spa
多行,每一行對應輸入中給定的短語在文字中出現的最後一個位置,搜索不到時輸出-1。設計
樣例輸入code
STOCKHOLM April 21 PRNewswire FirstCall Students from St Petersburg State University of IT Mechanics and Optics are crowned the 2009 ACM International Collegiate Programming Contest World Champions in the Stockholm Concert Hall where the Nobel Prizes are presented every year Sponsored by IBM the competition took place today at KTH the Royal Institute of Technology #
STOCKHOLM #
St Petersburg State University of IT Mechanics and Optics #
World Champions #
the #
NUPT #內存
樣例輸出ci
1
8
26
51
-1字符串
題目來源
南京郵電大學計算機學院首屆ACM程序設計大賽(2009)
好久沒寫,而後當頭有點蒙其實,連 連續輸入 都沒想起來要怎麼寫,
思路就是:定義兩個string字符串,origin保存輸入的原始字符串,comp保存進行比較的字符串,調用string自帶函數rfind(),判斷comp到底在不在origin中,若是不在就直接輸出-1,進行下一次循環;若是在,就去查找字符串的位置,主要是短語的位置。關於短語位置的求取,我是用的方法也比較常規,就是統計‘ ’ 空格個數,輸出的時候加1就好了,不難理解。
代碼:
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <cmath> using namespace std; const int len = 500 + 10; int main() { string origin; string comp; // freopen("datain.txt", "r", stdin); while(getline(cin, origin)) { origin = origin.substr(0,origin.length()-1); while(getline(cin, comp)) { comp = comp.substr(0,comp.length()-1); int hh = static_cast<int>(origin.rfind(comp)); if(hh == -1) { printf("-1\n"); } else { int cnt = 0; for(int i = 0; i <= hh; i++) { if(origin[i] == ' ') { cnt++; } } printf("%d\n",cnt + 1); } comp.clear(); } } }