P1603 斯诺登的密码
题目背景
根据斯诺登事件出的一道水题
题目描述
题目描述
2013年X月X日,俄罗斯办理了斯诺登的护照,于是他混迹于一架开往委内瑞拉的飞机。但是,这件事情太不周密了,因为FBI的间谍早已获悉他的具体位置——但这不是最重要的——最重要的是如果要去委内瑞拉,那么就要经过古巴,而经过古巴的路在美国的掌控之中。丧心病狂的奥巴马迫降斯诺登的飞机,搜查时却发现,斯诺登杳无踪迹。但是,在据说是斯诺登的座位上,发现了一张纸条。纸条由纯英文构成:Obama is a two five zero.(以"."结束输出,只有6个单词+一个句号,句子开头如没有大写亦为合法)这句话虽然有点无厘头,但是警官陈珺骛发现这是一条极其重要的线索。他在斯诺登截获的一台笔记本中找到了一个C++程序,输入这条句子后立马给出了相对应的密码。陈珺鹜高兴得晕了过去,身为警官的你把字条和程序带上了飞机,准备飞往曼哈顿国际机场,但是在飞机上检查的时候发现——程序被粉碎了!飞机抵达华盛顿只剩5分钟,你必须在这5分钟内编写(杜撰)一个程序,免受上司的10000000000%10大板。破译密码的步骤如下:
(1)找出句子中所有用英文表示的数字(≤20),列举在下:
正规:one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty
非正规:a both another first second third
(2)将这些数字平方后%100,如00,05,11,19,86,99。
(3)把这些两位数按数位排成一行,组成一个新数,如果开头为0,就去0。
(4)找出所有排列方法中最小的一个数,即为密码。
// 数据已经修正 By absi2011 如果还有问题请联系我
输入输出格式
输入格式:
一个含有6个单词的句子。
输出格式:
一个整型变量(密码)。
输入输出样例
Black Obama is two five zero .
425
输入输出样例
想不出别的什么方法,
只能模拟打表,,
感觉弄了好长时间。。。
打表就需要考虑很多特殊情况。。
然后这儿也用到了字符串快排。
代码虽然长,但应该不难理解。
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<algorithm> 5 #include<cstring> 6 #include<queue> 7 #include<map> 8 using namespace std; 9 10 string a[8]; 11 string b[233]; 12 int t; 13 14 bool cmp(string x,string y) 15 { 16 return x+y<y+x; 17 } 18 19 int main() 20 { 21 for(int i=1;i<=6;++i) 22 { 23 cin>>a[i]; 24 if(a[i]=="one"||a[i]=="a"||a[i]=="first") 25 { 26 t++; 27 b[t]="01"; 28 } 29 if(a[i]=="two"||a[i]=="both"||a[i]=="second") 30 { 31 t++; 32 b[t]="04"; 33 } 34 if(a[i]=="three"||a[i]=="another"||a[i]=="third") 35 { 36 t++; 37 b[t]="09"; 38 } 39 if(a[i]=="four") 40 { 41 t++; 42 b[t]="16"; 43 } 44 if(a[i]=="five") 45 { 46 t++; 47 b[t]="25"; 48 } 49 if(a[i]=="six") 50 { 51 t++; 52 b[t]="36"; 53 } 54 if(a[i]=="seven") 55 { 56 t++; 57 b[t]="49"; 58 } 59 if(a[i]=="eight") 60 { 61 t++; 62 b[t]="64"; 63 } 64 if(a[i]=="nine") 65 { 66 t++; 67 b[t]="81"; 68 } 69 if(a[i]=="ten") 70 { 71 t++; 72 b[t]="00"; 73 } 74 if(a[i]=="eleven") 75 { 76 t++; 77 b[t]="21"; 78 } 79 if(a[i]=="twelve") 80 { 81 t++; 82 b[t]="44"; 83 } 84 if(a[i]=="thirteen") 85 { 86 t++; 87 b[t]="69"; 88 } 89 if(a[i]=="fourteen") 90 { 91 t++; 92 b[t]="96"; 93 } 94 if(a[i]=="fifteen") 95 { 96 t++; 97 b[t]="25"; 98 } 99 if(a[i]=="sixteen") 100 { 101 t++; 102 b[t]="56"; 103 } 104 if(a[i]=="seventeen") 105 { 106 t++; 107 b[t]="89"; 108 } 109 if(a[i]=="eighteen") 110 { 111 t++; 112 b[t]="24"; 113 } 114 if(a[i]=="nineteen") 115 { 116 t++; 117 b[t]="61"; 118 } 119 if(a[i]=="twenty") 120 { 121 t++; 122 b[t]="81"; 123 } 124 } 125 if(t==0) 126 { 127 printf("0"); 128 return 0; 129 } 130 sort(b+1,b+t+1,cmp); 131 if(b[1]=="01") 132 { 133 cout<<1; 134 for(int i=2;i<=t;++i) 135 { 136 if(b[i]=="00") continue; 137 cout<<b[i]; 138 } 139 return 0; 140 } 141 if(b[1]=="04") 142 { 143 cout<<4; 144 for(int i=2;i<=t;++i) 145 { 146 if(b[i]=="00") continue; 147 cout<<b[i]; 148 } 149 return 0; 150 } 151 if(b[1]=="09") 152 { 153 cout<<9; 154 for(int i=2;i<=t;++i) 155 { 156 if(b[i]=="00") continue; 157 cout<<b[i]; 158 } 159 return 0; 160 } 161 for(int i=1;i<=t;++i) 162 { 163 if(b[i]=="00") continue; 164 cout<<b[i]; 165 } 166 return 0; 167 }
如果你不开心,那我就把右边这个帅傻子分享给你吧,
你看,他这么好看,那么深情的望着你,你还伤心吗?
真的!这照片盯上他五秒钟就想笑了。
一切都会过去的。