QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#650103 | #7705. Make Your Own Morse Code Palindrome | enze114514 | AC ✓ | 1ms | 3848kb | C++20 | 4.0kb | 2024-10-18 12:56:57 | 2024-10-18 12:56:57 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
#define pb push_back
const ld pi = 3.14159265358979323846;
const ll INF = 1e18;
template<typename T>
T chmax(T a, T b) {
return a > b ? a : b;
}
template<typename T>
T chmin(T a, T b) {
return a > b ? b : a;
}
const int N = (int)1e5 + 1, M = N * 2;
unordered_map<char, string> mp1 = {
{'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', "--.."},
{'0', "-----"},
{'1', ".----"},
{'2', "..---"},
{'3', "...--"},
{'4', "....-"},
{'5', "....."},
{'6', "-...."},
{'7', "--..."},
{'8', "---.."},
{'9', "----."}
};
unordered_map<string, char> mp2 = {
{".-", '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'},
{"-----", '0'},
{".----", '1'},
{"..---", '2'},
{"...--", '3'},
{"....-", '4'},
{".....", '5'},
{"-....", '6'},
{"--...", '7'},
{"---..", '8'},
{"----.", '9'}
};
vector<char> ch;
struct Dp{
int v = 0;
vector<char> c;
};
int pld(string t){
int uwu = 0;
for(int l = 0, r = t.size() - 1; l < r; l++, r--){
if(t[l] != t[r]){
uwu = 1;
}
}
return !uwu;
}
vector<char> dp(string s){
int n = s.size();
vector<Dp> f(n + 1);
s = "#" + s;
for(int i = 1; i <= n; i++){
f[i].v = (int)1e9;
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= i; j++){
string t = s.substr(j, i - j + 1);
if(mp2.count(t) && (j == 0 || f[j - 1].v + 1 < f[i].v)){
if(j == 0){
f[i].v = 1;
}
else{
f[i].v = f[j - 1].v + 1;
f[i].c = f[j - 1].c;
}
f[i].c.pb(mp2[t]);
}
}
}
return f[n].c;
}
void solve(){
string input, s;
getline(cin, input);
for(char c : input){
if(isalnum(c)){
s += c;
}
}
string ds = "";
for(auto &c : s){
c = toupper(c);
ds += mp1[c];
ch.pb(c);
}
if(pld(ds)){
cout << 0 << endl;
return;
}
// cout << ds << endl;
for(int i = ds.size() - 1; i >= 1; i--){
string t = ds.substr(i);
// cout << "here " << t << endl;
if(pld(t)){
string qwq = ds.substr(0, i);
reverse(qwq.begin(), qwq.end());
vector<char> uwu = dp(qwq);
// cout << qwq << " " << uwu.size() << endl;
if(uwu.size() < ch.size()){
ch = uwu;
}
}
}
cout << ch.size() << " ";
for(auto v : ch){
cout << v;
} cout << endl;
}
//......-.-.-..-..-..--...
//......-.-.-..-..-..--...
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t = 1;
// cin >> t;
while (t--) {
solve();
}
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 3600kb
input:
FOOT
output:
1 L
result:
ok correct
Test #2:
score: 0
Accepted
time: 0ms
memory: 3848kb
input:
FOOTS
output:
3 29D
result:
ok correct
Test #3:
score: 0
Accepted
time: 0ms
memory: 3532kb
input:
FOOTS
output:
3 29D
result:
ok correct
Test #4:
score: 0
Accepted
time: 0ms
memory: 3616kb
input:
FOOTSTOOL
output:
0
result:
ok correct
Test #5:
score: 0
Accepted
time: 0ms
memory: 3592kb
input:
OOTNX
output:
2 J0
result:
ok correct
Test #6:
score: 0
Accepted
time: 0ms
memory: 3584kb
input:
3 FRENCH HENS
output:
6 HFKFL7
result:
ok correct
Test #7:
score: 0
Accepted
time: 1ms
memory: 3580kb
input:
TWAS THE NIGHT BEFORE XMAS
output:
13 F8DKGB357BFFQ
result:
ok correct
Test #8:
score: 0
Accepted
time: 1ms
memory: 3592kb
input:
1A2B3C4D5E6F7G8H9I10J
output:
18 10484G7Q5L5P4J51F9
result:
ok correct
Test #9:
score: 0
Accepted
time: 0ms
memory: 3648kb
input:
A PARTRIDGE IN A PEAR TREE
output:
8 QF3FFCXC
result:
ok correct
Test #10:
score: 0
Accepted
time: 0ms
memory: 3656kb
input:
TEN LORDS ALEAPING
output:
9 DP6C5C8DK
result:
ok correct
Test #11:
score: 0
Accepted
time: 1ms
memory: 3600kb
input:
XABCDQRST1234567890123456789
output:
7 6CZKLPX
result:
ok correct
Test #12:
score: 0
Accepted
time: 1ms
memory: 3584kb
input:
ASDFGHJKLQWERTYUIOPMNBVCXZ987
output:
23 UXQ88CZ4JP8DQCPYFY73LFF
result:
ok correct
Test #13:
score: 0
Accepted
time: 0ms
memory: 3652kb
input:
THE QUICK BROWN FOX JUMPS OVER
output:
17 24YXQ2KVQGBPKLXP4
result:
ok correct
Test #14:
score: 0
Accepted
time: 1ms
memory: 3588kb
input:
1234567891 IS A PRIME NUMBER 0
output:
18 Q59F7XC59123456789
result:
ok correct
Test #15:
score: 0
Accepted
time: 0ms
memory: 3584kb
input:
INTRANSIGENCE
output:
0
result:
ok correct
Test #16:
score: 0
Accepted
time: 1ms
memory: 3684kb
input:
ANTICKING ANTICKING WRECKING A
output:
5 KFCXP
result:
ok correct
Test #17:
score: 0
Accepted
time: 1ms
memory: 3628kb
input:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
output:
1 R
result:
ok correct
Test #18:
score: 0
Accepted
time: 1ms
memory: 3540kb
input:
ISO9001 "IEEEEEEEEEEEEEEEEEEEE
output:
6 110Y05
result:
ok correct