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 }