HDU 4278 & HDU 4287

两道天津网络赛的水题···

题目:hdu4278

题目大意:其实就是一个八进制十进制的转换,几行搞定。

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #define ll long long
 4 using namespace std;
 5 ll n,m,ans,k,a[10]={0,1,2,0,3,4,5,6,0,7};
 6 int main(){
 7     while(cin>>n,n){
 8         ans = 0; k = 1; m = n;
 9         while(n){
10             ans += a[n%10] * k;
11             n /= 10;
12             k *= 8;
13         }
14         printf("%I64d: %I64d\n",m,ans);
15     }
16     return 0;
17 }

 

----------------------------------------------------------------------------------------------

题目:hdu4287

 

题目大意: 类似于手机上的九宫格输入法,题目给你一些数字组合和一些单词,要求你统计这些数字能组成各个单词的个数。

这个用map来实现就很方便了,操作时候把单词转化成对应的数字先。

 

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <map>
 5 using namespace std;
 6 #define X 5010
 7 int n,m;
 8 int tes[X];
 9 int a[] = {2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9};
10 char s[10];
11 
12 int main(){
13     int tt;
14     scanf("%d",&tt);
15     while(tt--){
16         int x,temp;
17         scanf("%d%d",&n,&m);
18         map<int,int> ma;
19         memset(tes,0,sizeof(tes));
20         for(int i = 1; i <= n; i ++){
21             scanf("%d",&x);
22             ma[x] = i;
23         }
24         for(int i = 0; i < m; i ++){
25             scanf("%s",s);
26             temp = 0;
27             for(int j = 0; s[j]; j ++)
28                 temp = temp*10+a[s[j]-'a'];
29             tes[ma[temp]] ++;
30         }
31         for(int i = 1; i <= n; i ++)
32             printf("%d\n",tes[i]);
33     }
34     return 0;
35 }

 

 

 

 

posted @ 2012-09-12 21:06  XDruid  阅读(235)  评论(0编辑  收藏  举报