【FZSZ2017暑假提高组Day9】猜数游戏(number)

题目描述

今天你交到了一个新的friend, 他想要考考你。

于是他把自己的电话号码写成了一系列的英文单词,

比如说012就写成了ZEROONETWO

然后,他干了一件很恶趣味的事,那就是把这个字符串 打·乱·了

比如上面的字符串可能就变成OWTZEOORNE

他想要考考你你能不能从这个打乱的字符串SS还原出原来的电话号码

正常情况下这当然是不可能的,不过他给了你一个提示,你能够确定的是,它的电话号码是不降的,也就是说,只会有001122这样的号码,而不会有010122这样的号码

题目数据保证有唯一解

输入格式

输入一行一个字符串,只包含大写字母

字符串由以下单词拼接并打乱而成,ZEROONETWOTHREEFOURFIVESIXSEVEN,EIGHTNINE

输出格式

输出一行字符串,表示还原的电话号码,题目保证每个输入都有唯一的解

数据规模及约定

对于 100%100%的数据 3|S|20003≤|S|≤2000

对于 20%20%的数据 3|S|203≤|S|≤20

样例输入

OZONETOWER
WEIGHFOXTOURIST
OURNEONFOE
ETHER

样例输出

012
2468
114
3

题解
很容易确定某些数字是肯定存在的,然后根据这种限制关系优先处理一下。然后暴力搜索一下就可以了。
 1 #include <iostream>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <cstdio>
 5 #include <cmath>
 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<strlen(str); ++i)
16         b[str[i]-'A']++;
17     while(b[25]>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 }

 



posted @ 2017-08-11 16:33  小白的小白  阅读(227)  评论(0编辑  收藏  举报