题目描述
今天你交到了一个新的friend, 他想要考考你。
于是他把自己的电话号码写成了一系列的英文单词,
比如说012
就写成了ZEROONETWO
然后,他干了一件很恶趣味的事,那就是把这个字符串 打·乱·了
比如上面的字符串可能就变成OWTZEOORNE
他想要考考你你能不能从这个打乱的字符串SS还原出原来的电话号码
正常情况下这当然是不可能的,不过他给了你一个提示,你能够确定的是,它的电话号码是不降的,也就是说,只会有001122
这样的号码,而不会有010122
这样的号码
题目数据保证有唯一解
输入格式
输入一行一个字符串,只包含大写字母
字符串由以下单词拼接并打乱而成,ZERO
, ONE
, TWO
, THREE
, FOUR
, FIVE
, SIX
, SEVEN
,EIGHT
, NINE
输出格式
输出一行字符串,表示还原的电话号码,题目保证每个输入都有唯一的解
数据规模及约定
对于 100%100%的数据 3≤|S|≤20003≤|S|≤2000
对于 20%20%的数据 3≤|S|≤203≤|S|≤20
样例输入
OZONETOWER
WEIGHFOXTOURIST
OURNEONFOE
ETHER
样例输出
012
2468
114
3 题解 很容易确定某些数字是肯定存在的,然后根据这种限制关系优先处理一下。然后暴力搜索一下就可以了。
1 #include2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const int M = 2000 + 10; 8 const int N = 100 + 5; 9 char tmp[M];10 int b[N], ans[10];11 int main()12 {13 14 scanf("%s", &tmp);15 for(int i=0; i 0 && b[4]>0 && b[17]>0 && b[14]>0)18 ans[0]++, b[25]--, b[4]--, b[17]--, b[14]--;19 while(b[19]>0 && b[22]>0 && b[14]>0)20 ans[2]++, b[19]--, b[22]--, b[14]--;21 while(b[18]>0 && b[8]>0 && b[23]>0)22 ans[6]++, b[18]--, b[8]--, b[23]--;23 while(b[18]>0 && b[4]>1 && b[21]>0 && b[13]>0)24 ans[7]++, b[18]--, b[4]-=2, b[21]--, b[13]--;25 while(b[5]>0 && b[8]>0 && b[21]>0 && b[4]>0)26 ans[5]++, b[5]--, b[8]--, b[21]--, b[4]--;27 while(b[5]>0 && b[14]>0 && b[20]>0 && b[17]>0)28 ans[4]++, b[14]--, b[20]--, b[17]--, b[5]--;29 while(b[19]>0 && b[7]>0 && b[17]>0 && b[4]>1)30 ans[3]++, b[19]--, b[7]--, b[17]--, b[4]-=2;31 while(b[4]>0 && b[13]>0 && b[14]>0)32 ans[1]++, b[4]--, b[13]--, b[14]--;33 while(b[4]>0 && b[8]>0 && b[6]>0 && b[7]>0 && b[19])34 ans[8]++, b[4]-- ,b[8]--, b[6]--, b[7]--, b[19]--;35 while(b[8]>0 && b[4]>0 && b[13]>1)36 ans[9]++, b[8]--, b[4]--, b[13]-=2;37 for(int i=0; i<=9; ++i)38 for(int j=1; j<=a[i]; ++j)39 printf("%d", i);40 printf("\n");41 return 0;42 }