MOBITEL
2017-08-07 00:21
113 查看
Time Limit: 2000ms, Special Time Limit:5000ms, Memory Limit:65536KB |
Total submit users: 25, Accepted users: 22 |
Problem 13800 : No special judgement |
Problem description |
Grasshopper Marko was jumping happily all over the meadow. He wasn’t being careful and his Nokia 3310 fell intoa puddle. His mobile phone is now acting funny! The contacts got wet and the keyboard works in a completelyunpredictable manner! All the numerical keys broke down. When we press one of them, the mobile phone acts asif we pressed another key. Luckily, there are no two keys that are acting the same so Marko can still writeall the letters. Grasshopper Marko was experimenting a bit and found out how each key acts. Now he wants to write a messageto his girlfriend. Since he is just a grasshopper, you will do that for him. all those who don’t remember how mobile phones with keys work, here is a short description. The image shows keys with letters that we can get by pressing that key (on a working mobile phone that didn’tfall into a puddle). For example, if we want to get letter ‘a‘ we will press key 2 once, and if we want letter ‘b‘ wewill press the key 2 twice. If we want to write two letters from the same key consecutively, we have to press thepound key (‘#‘) exactly once. For example, if we want to write the string “klor“ we will press the keys in thefollowing order: “55#555666777“. |
Input |
The first line of input contains 9 integers. The first integer marks the behaviour of key ‘1‘, the second the behaviourof key ‘2‘, the third the behaviour of key ‘3‘, and so on. Marko is not using keys ‘*‘ and ‘0‘ because he is a grasshopper. Key ‘#‘ can’t get broken. The second line of input contains a string consisting of only lowercase letters of the English alphabet. The lengthof the word won’t exceed 100 characters. |
Output |
The first and only line of output must contain the sequence of keys you need to press in order to write Marko’smessage. |
Sample Input |
Sample Input 1 2 3 4 5 6 7 8 9 1 klor Sample Input 2 7 8 9 1 2 3 6 5 4 djevojka Sample Input 3 9 8 7 6 5 4 3 2 1 skakavac |
Sample Output |
Sample Output 1 44#444555666 Sample Output 2 68662227778#885 Sample Output 3 33335585582228#888 |
Judge Tips |
All of the keys are shifted one place to the right so the output differs a little bit fromthe example in the task statement. |
Problem Source |
COCI 2014/2015 contest 2解题思路其实这道题非常的简单,我的思路就是。我们可以把一个字母,分别表示成对应的键以及对应的位置比如b,在2号键的2号位置,所以我就设置为2.2 通过这样子我就可以到时候利用这个小数的整数部分确定换掉之后要输出什么数字,以及利用小数部分来确定究竟要输出多少次。至于是否要输出“#”,我们可以定义一个变量来进行比较。 代码展示#include<iostream>#include<string> using namespace std; int main() { int p[9]; for(int i=0;i<9;i++) p[i]=0; while(cin>>p[0]) { for(int i=1;i<9;i++) cin>>p[i]; cin.get(); string a; cin>>a; int n=a.size(); double b[100]; for(int i=0;i<100;i++) b[i]=0; for(int i=0;i<n;i++) { if(a[i]=='a') b[i]=2.1; if(a[i]=='b') b[i]=2.2; if(a[i]=='c') b[i]=2.3; if(a[i]=='d') b[i]=3.1; if(a[i]=='e') b[i]=3.2; if(a[i]=='f') b[i]=3.3; if(a[i]=='g') b[i]=4.1; if(a[i]=='h') b[i]=4.2; if(a[i]=='i') b[i]=4.3; if(a[i]=='j') b[i]=5.1; if(a[i]=='k') b[i]=5.2; if(a[i]=='l') b[i]=5.3; if(a[i]=='m') b[i]=6.1; if(a[i]=='n') b[i]=6.2; if(a[i]=='o') b[i]=6.3; if(a[i]=='p') b[i]=7.1; if(a[i]=='q') b[i]=7.2; if(a[i]=='r') b[i]=7.3; if(a[i]=='s') b[i]=7.4; if(a[i]=='t') b[i]=8.1; if(a[i]=='u') b[i]=8.2; if(a[i]=='v') b[i]=8.3; if(a[i]=='w') b[i]=9.1; if(a[i]=='x') b[i]=9.2; if(a[i]=='y') b[i]=9.3; if(a[i]=='z') b[i]=9.4; } int tmp=0; for(int i=0,last=-1;i<a.size();i++) { tmp=(int)(b[i]+0.5); for(int j=0;j<9;j++) { if(p[j]==tmp) { tmp=j+1; break; } } if(tmp==last) cout<<"#"; int tmp2=b[i]*10; tmp2=tmp2%10; for(int k=0;k<tmp2;k++) cout<<tmp; last=tmp; } cout<<endl; } } 很遗憾,这种做法得到的是WA,问题出现在哪呢? double的精度损失避免这种情况是,当你转换成int的时候,要么加上0.5再转(别进位了。。。。。。),要么就直接用整数吧例如4.2就用42,/10得到整数位置,%10得到个位位置。附上两个AC代码#include<iostream>#include<string> using namespace std; int main() { int p[9]; for(int i=0;i<9;i++) p[i]=0; while(cin>>p[0]) { for(int i=1;i<9;i++) cin>>p[i]; cin.get(); string a; cin>>a; int n=a.size(); int b[100]; for(int i=0;i<100;i++) b[i]=0; for(int i=0;i<n;i++) { if(a[i]=='a') b[i]=21; if(a[i]=='b') b[i]=22; if(a[i]=='c') b[i]=23; if(a[i]=='d') b[i]=31; if(a[i]=='e') b[i]=32; if(a[i]=='f') b[i]=33; if(a[i]=='g') b[i]=41; if(a[i]=='h') b[i]=42; if(a[i]=='i') b[i]=43; if(a[i]=='j') b[i]=51; if(a[i]=='k') b[i]=52; if(a[i]=='l') b[i]=53; if(a[i]=='m') b[i]=61; if(a[i]=='n') b[i]=62; if(a[i]=='o') b[i]=63; if(a[i]=='p') b[i]=71; 4000 if(a[i]=='q') b[i]=72; if(a[i]=='r') b[i]=73; if(a[i]=='s') b[i]=74; if(a[i]=='t') b[i]=81; if(a[i]=='u') b[i]=82; if(a[i]=='v') b[i]=83; if(a[i]=='w') b[i]=91; if(a[i]=='x') b[i]=92; if(a[i]=='y') b[i]=93; if(a[i]=='z') b[i]=94; } int tmp=0; for(int i=0,last=-1;i<a.size();i++) { tmp=b[i]/10; for(int j=0;j<9;j++) { if(p[j]==tmp) { tmp=j+1; break; } } if(tmp==last) cout<<"#"; int tmp2=b[i]%10; for(int k=0;k<tmp2;k++) cout<<tmp; last=tmp; } cout<<endl; } } #include<iostream> #include<string> using namespace std; int main() { int p[9]; for(int i=0;i<9;i++) p[i]=0; while(cin>>p[0]) { for(int i=1;i<9;i++) cin>>p[i]; cin.get(); string a; cin>>a; int n=a.size(); double b[100]; for(int i=0;i<100;i++) b[i]=0; for(int i=0;i<n;i++) { if(a[i]=='a') b[i]=2.1; if(a[i]=='b') b[i]=2.2; if(a[i]=='c') b[i]=2.3; if(a[i]=='d') b[i]=3.1; if(a[i]=='e') b[i]=3.2; if(a[i]=='f') b[i]=3.3; if(a[i]=='g') b[i]=4.1; if(a[i]=='h') b[i]=4.2; if(a[i]=='i') b[i]=4.3; if(a[i]=='j') b[i]=5.1; if(a[i]=='k') b[i]=5.2; if(a[i]=='l') b[i]=5.3; if(a[i]=='m') b[i]=6.1; if(a[i]=='n') b[i]=6.2; if(a[i]=='o') b[i]=6.3; if(a[i]=='p') b[i]=7.1; if(a[i]=='q') b[i]=7.2; if(a[i]=='r') b[i]=7.3; if(a[i]=='s') b[i]=7.4; if(a[i]=='t') b[i]=8.1; if(a[i]=='u') b[i]=8.2; if(a[i]=='v') b[i]=8.3; if(a[i]=='w') b[i]=9.1; if(a[i]=='x') b[i]=9.2; if(a[i]=='y') b[i]=9.3; if(a[i]=='z') b[i]=9.4; } int tmp=0; for(int i=0,last=-1;i<a.size();i++) { tmp=(int)(b[i]+0.5); for(int j=0;j<9;j++) { if(p[j]==tmp) { tmp=j+1; break; } } if(tmp==last) cout<<"#"; int tmp2=(int)(b[i]*10+0.5)%10; for(int k=0;k<tmp2;k++) cout<<tmp; last=tmp; } cout<<endl; } } |
相关文章推荐
- 关于PHP浮点数你应该知道的(All 'bogus' about the float in PHP)
- C++语言实现hash表详解及实例代码
- C语言double和float 实例分析
- java String 转成Double二维数组的方法
- 完美解决gson将Integer默认转换成Double的问题
- 解决java数值范围以及float与double精度丢失的问题
- java中double类型运算结果异常的解决方法
- 浅谈Java double 相乘的结果偏差小问题
- 简单的四则运算
- 数的奇偶性
- ACMer博客瀑布流分析
- ACM程序设计大赛题目分类
- 2015年acm国内排名
- 计算字符串最后一个单词长度
- Found: decimal, expected: double precision
- 一些OJ网站
- (DBA之路【三】)mysql支持的基本数据类型
- css导航栏
- 2. 变量
- ACM网址