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 }

 

 

 

 

你可能感兴趣的:(HDU)