-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path554.cpp
88 lines (74 loc) · 2.35 KB
/
554.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// iagorrr ;)
#include <bits/stdc++.h>
using namespace std;
string alphabet = {' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
map <string, bool> dicWords;
pair <string, int> ans;
void check(string S){
for(int k = 0; k < 27; k++){
string D;
int TempAns = 0;
for(int i = 0; i < S.size(); i++){
D.push_back(alphabet[alphabet.find(S[i])+k]);
}
// cout << D << endl;
// Verificar quais palavras decodificadas realmente existem.
string word;
for(int i = 0; i < D.size(); i++){
if(D[i] != ' ' && i < D.size()+1) word.push_back(D[i]);
else {
if(dicWords[word]){// se achar um espaço verificar se a palavra formada realmente existe.
TempAns++;
}
word.clear();
}
}
if(TempAns > ans.second){
ans.first = D;
ans.second = TempAns;
}
}
}
void outputFormated(string S, int lineSize){
istringstream outputString(S);
size_t lineLen = 0;// Better than an int or lli.
string currentWord;
while(outputString >> currentWord){
size_t wordLen = currentWord.size();
if(lineLen == 0){
cout << currentWord;
lineLen = currentWord.size();
continue;
}
else{
if(lineLen + wordLen + 1 > 60){
cout << endl;
cout << currentWord;
lineLen = wordLen;
}
else{
cout << ' ' << currentWord;
lineLen += wordLen + 1;
}
}
}
cout << endl;
}
int main(){
// Pra qualquer primeiro valor ser melhor.
ans.second = -1;
// Ler as strings correspondentes aos dicionários.
string S;
while(getline(cin, S)){
if(S == "#") break;
dicWords[S] = true;
}
// Ler a string codificada.
getline(cin ,S);
// Verificar qual a melhor resposta, dado o dicionário e a string.
check(S);
// Exibir a resposta com a formatação solicitada.
outputFormated(ans.first, 60);
return 0;
}
// Accepted.