题目:http://poj.org/problem?id=2121
很很简单的题,权当用map 做着玩吧,就是给出英文的数,然后让你转换成数字,注意当是 百,千,百万的时候的处理,不为别的,就为了那个打表,打的眼晕,最后还是打错了,交了两次才发现,汗
View Code
1 #include<iostream> 2 #include<sstream> 3 #include<cstdio> 4 #include<cstring> 5 #include<algorithm> 6 #include<string> 7 #include<vector> 8 #include<map> 9 #include<queue> 10 #include<stack> 11 #include<cmath> 12 #include<set> 13 #define N 5010 14 #define inf 100000000 15 #define _clr(a,val) (a,val,sizeof(a)) 16 #define Min(x, y) x < y ? x : y 17 #define Max(x, y) x < y ? y : x 18 19 using namespace std; 20 21 typedef long long ll; 22 23 char str[N]; 24 map<string,int>ma; 25 void init() 26 { 27 ma["zero"] = 0, ma["one"] = 1, ma["two"] = 2; 28 ma["three"] = 3, ma["four"] = 4, ma["five"] = 5; 29 ma["six"] = 6, ma["seven"] = 7, ma["eight"] = 8; 30 ma["nine"] = 9, ma["ten"] = 10, ma["eleven"] = 11; 31 ma["twelve"] = 12, ma["thirteen"] = 13, ma["fourteen"] = 14; 32 ma["fifteen"] = 15, ma["sixteen"] = 16, ma["seventeen"] = 17; 33 ma["eighteen"] = 18, ma["nineteen"] = 19, ma["twenty"] = 20; 34 ma["thirty"] = 30, ma["forty"] = 40, ma["fifty"] = 50; 35 ma["sixty"] = 60, ma["seventy"] = 70, ma["eighty"] = 80; 36 ma["ninety"] = 90; 37 ma["hundred"] = 100, ma["thousand"] = 1000, ma["million"] = 1000000; 38 } 39 int main() 40 { 41 //freopen("data.txt","r",stdin); 42 init(); 43 while(gets(str)) 44 { 45 ll sum = 0; 46 ll tsum = 0; 47 if(!strcmp(str,"")) break; 48 istringstream s(str); 49 while(s >> str) 50 { 51 //cout<<"str = "<<str<<endl; 52 if(!strcmp(str,"negative")) printf("-"); 53 if(strcmp(str,"million") && strcmp(str,"thousand") && strcmp(str,"hundred") && strcmp(str,"zero")) sum += ma[str]; 54 else if(!strcmp(str,"hundred") || !strcmp(str,"zero")) sum *= ma[str]; 55 else if(!strcmp(str,"thousand")) 56 { 57 tsum += sum * 1000, sum = 0; 58 } 59 else if(!strcmp(str,"million")) 60 { 61 tsum += sum * 1000000, sum = 0; 62 } 63 } 64 //printf("%I64d\n",tsum + sum); 65 cout<<(tsum + sum)<<endl; 66 } 67 return 0; 68 }
题目:http://poj.org/problem?id=2403
比上个还简单的题,先是给出 N 个单词,每个单词对应一个权值,下面给出M串很长的字符串,让你统计在每个字符串里出现的单词的权值总和
View Code
1 #include<iostream> 2 #include<sstream> 3 #include<cstdio> 4 #include<cstring> 5 #include<algorithm> 6 #include<string> 7 #include<vector> 8 #include<map> 9 #include<queue> 10 #include<stack> 11 #include<cmath> 12 #include<set> 13 #define N 5010 14 #define inf 100000000 15 #define _clr(a,val) (a,val,sizeof(a)) 16 #define Min(x, y) x < y ? x : y 17 #define Max(x, y) x < y ? y : x 18 19 using namespace std; 20 21 typedef long long ll; 22 23 char str[N]; 24 25 map<string,int>ma; 26 27 int main() 28 { 29 //freopen("data.txt","r",stdin); 30 int n,m; 31 int x; 32 while(scanf("%d%d",&n,&m) != EOF) 33 { 34 for(int i = 0; i < n; i++) 35 { 36 cin>>str>>x; 37 ma[str] = x; 38 } 39 while(m--) 40 { 41 ll sum = 0; 42 while(gets(str)) 43 { 44 if(!strcmp(str,".")) break; 45 istringstream s(str); 46 while(s >> str) 47 { 48 sum += ma[str]; 49 } 50 } 51 cout<<sum<<endl; 52 } 53 } 54 return 0; 55 }