HDOJ 字符串處理簡單題合集

1.

單詞數

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 61340    Accepted Submission(s): 15204


Problem Description
lily的好朋友xiaoou333最近很空,他想了一件沒有什麼意義的事情,就是統計一篇文章裏不同單詞的總數。下面你的任務是幫助xiaoou333解決這個問題。
 

Input
有多組數據,每組一行,每組就是一篇小文章。每篇小文章都是由小寫字母和空格組成,沒有標點符號,遇到#時表示輸入結束。
 

Output
每組只輸出一個整數,其單獨成行,該整數代表一篇文章裏不同單詞的總數。
 

Sample Input
you are my friend#
 

Sample Output
4
 

Author
Lily
 

Source

解答: 


#include<iostream>  
#include<cstdio>  
#include<cstring>  
#include<algorithm> 
#include<vector> 
#include<cmath>  
#include<sstream>
#include<cstdlib>
#include<queue>
#include<map>
using namespace std;
int main(){
	string s;
	map<string,int> m;
	while(getline(cin,s)&&s!="#"){
		int flag = 0;
		string word = "";
		m.clear();
		int len = s.length();
		for(int i =0;i<len;i++){
			word.clear();
			while('a' <= s[i]&&s[i] <= 'z'){
				word+=s[i];
				i++;
				flag = 1;
			}
			if(flag){
				m[word]++;
				flag = 0;
			}
		}
		cout<<m.size()<<endl;
	}
	return 0;
}


2.

手機短號

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 35680    Accepted Submission(s): 21647


Problem Description
大家都知道,手機號是一個11位長的數字串,同時,作爲學生,還可以申請加入校園網,如果加入成功,你將另外擁有一個短號。假設所有的短號都是是 6+手機號的後5位,比如號碼爲13512345678的手機,對應的短號就是645678。
現在,如果給你一個11位長的手機號碼,你能找出對應的短號嗎?
 

Input
輸入數據的第一行是一個N(N <= 200),表示有N個數據,接下來的N行每一行爲一個11位的手機號碼。
 

Output
輸出應包括N行,每行包括一個對應的短號,輸出應與輸入的順序一致。
 

Sample Input
2 13512345678 13787654321
 

Sample Output
645678 654321

解答:

#include<iostream>  
#include<cstdio>  
#include<cstring>  
#include<algorithm> 
#include<vector> 
#include<cmath>  
#include<sstream>
#include<cstdlib>
#include<queue>
#include<map>
using namespace std;
int main(){
	int n;
	cin>>n;
	string s;
	for(int i =0;i<n;i++){
		cin>>s;
		s = s.substr(6,5);
		cout<<"6"<<s<<endl;
	}
	return 0;
}


3.

考試排名

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 17257    Accepted Submission(s): 5985


Problem Description
C++編程考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功能是怎麼實現的呢?
我們做好了題目的解答,提交之後,要麼“AC”,要麼錯誤,不管怎樣錯法,總是給你記上一筆,表明你曾經有過一次錯誤提交,因而當你一旦提交該題“AC”後,就要與你算一算帳了,總共該題錯誤提交了幾回。雖然你在題數上,大步地躍上了一個臺階,但是在耗時上要攤上你共花去的時間。特別是,曾經有過的錯誤提交,每次都要攤上一定的單位時間分。這樣一來,你在做出的題數上,可能領先別人很多,但是,在做出同樣題數的人羣中,你可能會在耗時上處於排名的劣勢。
例如:某次考試一共8題(A,B,C,D,E,F,G,H),每個人做的題都在對應的題號下有個數量標記,負數表示該學生在該題上有過的錯誤提交次數,但到現在還沒有AC,正數表示AC所耗的時間,如果正數a跟上一對括號,裏面有個整數b,那就表示該學生提交該題AC了,耗去了時間a,同時,曾經錯誤提交了b次,因此對於下述輸入數據:



若每次錯誤提交的罰分爲20分,則其排名從高到低應該是這樣的:
Josephus 5 376
John 4 284
Alice 4 352
Smith 3 167
Bob 2 325
Bush 0 0
 

Input
輸入數據的第一行是考試題數n(1≤n≤12)以及單位罰分數m(10≤m≤20),每行數據描述一個學生的用戶名(不多於10個字符的字串)以及對所有n道題的答題現狀,其描述採用問題描述中的數量標記的格式,見上面的表格,提交次數總是小於100,AC所耗時間總是小於1000。

 

Output
將這些學生的考試現狀,輸出一個實時排名。實時排名顯然先按AC題數的多少排,多的在前,再按時間分的多少排,少的在前,如果湊巧前兩者都相等,則按名字的字典序排,小的在前。每個學生佔一行,輸出名字(10個字符寬),做出的題數(2個字符寬,右對齊)和時間分(4個字符寬,右對齊)。名字、題數和時間分相互之間有一個空格。
 

Sample Input
8 20 Smith -1 -16 8 0 0 120 39 0 John 116 -2 11 0 0 82 55(1) 0 Josephus 72(3) 126 10 -3 0 47 21(2) -2 Bush 0 -1 -8 0 0 0 0 0 Alice -2 67(2) 13 -1 0 133 79(1) -1 Bob 0 0 57(5) 0 0 168 -7 0
 

Sample Output
Josephus 5 376 John 4 284 Alice 4 352 Smith 3 167 Bob 2 325 Bush 0 0



解答:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章