Hướng dẫn giải của 2023F. Bức thư bí ẩn
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Tác giả:
Gợi ý 1
Bạn có biết rằng bài này khi làm trong contest có giá trị là 1000 điểm và có 5/50 testcase trong đề bài trùng với bộ test của máy chấm không? Trong khi những bài khác có giá trị là 100 điểm thôi. Vậy nếu làm đúng 5 testcase bằng việc cào test là đã được nhiều điểm hơn người khác và có vị trí tốt hơn rồi. Bạn có cào được testcase nào không hay thấy khó quá thì bỏ qua? Cào 5 testcase bài này trong contest là được 100 điểm rồi nha.
Gợi ý 2
Để cào test thì đơn giản là ta chỉ cần copy input và output là được, rồi tiếp đó là dùng if else. Nếu input giống thì output ra cái này, khác thì output ra cái kia
Gợi ý 3
Không quên rằng trong c++ thì những kí tự như
\
và"
nếu viết trong một xâu kí tự thì trước đó phải đặt thêm một dấu\
vào trước đó. để không bị lỗi. (Hãy thử in ra 2 kí tự trên để biết kết quả)
Gợi ý 4
Trong những input trên có rất nhiều kí tự
\
và kí tự"
. Vì thế ta cũng có thể gõ dấu\
phía trước một cách thủ công, hoặc viết một chương trình c++ cơ bản là có thể tăng tính chính xác và tăng tốc độ.
Lời giải
Bài tập này có lời giải nhưng do tên bài tập là
Bức thư bí ẩn
nên để bảo mật nội dung của bức thư thì Trường sẽ không viết lời giải cho bài tập này. Nhưng Trường đảm bảo rằng bài tập này có thể decode được và Accept được 50/50 testcase. Và nội dung bức thư cuối đề bài sau khi được giải mã sẽ là một đoạn văn bản Tiếng Việt không dấu, và nó có ý nghĩa.
Code
/**
* Create: Sunday 2023-12-24-00.00.37 GMT+7
* Title : buc thu bi an
* Author:
*****/
#include <bits/stdc++.h>
#line 10 "tranxuantruong"
#ifndef MY_TEMPLATE
#define TranXuanTruong main()
#define Get_better(...) ios::sync_with_stdio(0); cin.tie(0);
using namespace std;
template <typename T> ostream& operator << (ostream& os, const stack <T> &stack_) {os << "["; int n = (int) stack_.size(); vector <T> archive (n); stack <T> stackCopy_ (stack_); for (int i=0; i<n; ++i) {archive[stackCopy_.size()-1]=stackCopy_.top(); stackCopy_.pop();} if (!archive.empty()) {for (auto it=archive.begin(); it!=archive.end()-1; ++it) {os <<*it <<", ";} os <<archive.back();} os <<" "; return os;}
template <typename T> ostream& operator << (ostream& os, const queue <T> &queue_) {os << "->["; int n = (int) queue_.size(); vector <T> archive (n); queue <T> queueCopy_ (queue_); for (int i=0; i<n; ++i) {archive[queueCopy_.size()-1]=queueCopy_ .front(); queueCopy_.pop();} if (!archive.empty()) {for (auto it=archive.begin(); it!=archive.end()-1; ++it) {os <<*it <<", ";} os <<archive.back();} os <<" "; return os;}
template <typename T> ostream& operator << (ostream& os, const priority_queue <T,vector<T>,greater<T>>&Queue_) {os << "["; int n = (int) Queue_.size(); vector <T> archive (n); priority_queue<T,vector<T>,greater<T>> QueueCopy_ (Queue_); for (int i=0; i<n; ++i) {archive[QueueCopy_.size()-1]=QueueCopy_.top(); QueueCopy_.pop();} if (!archive.empty()) {for (auto it=archive.begin(); it!=archive.end()-1; ++it) {os <<*it <<", ";} os <<archive.back();} os <<" "; return os;}
template <typename T> ostream& operator << (ostream& os, const priority_queue <T> &Queue_) {os << "["; int n = (int) Queue_.size(); vector <T> archive (n); priority_queue<T> QueueCopy_ (Queue_); for (int i=0; i<n; ++i) {archive[QueueCopy_.size()-1]=QueueCopy_.top(); QueueCopy_.pop();} if (!archive.empty()) {for (auto it=archive.begin(); it!=archive.end()-1; ++it) {os <<*it <<", ";} os <<archive.back();} os <<" "; return os;}
template <typename T> ostream& operator << (ostream& os, const vector <T> &vector_) {os << "["; if (!vector_ .empty()) {for (auto it = vector_ .begin(), i=0; i< (int) vector_ .size()-1; ++i, ++it) {os <<*it <<", ";} os << * (vector_ .rbegin());} os << "]"; return os;}
template <typename T> ostream& operator << (ostream& os, const deque <T> &deque_) {os << "["; if (!deque_ .empty()) {for (auto it = deque_ .begin(), i=0; i< (int) deque_ .size()-1; ++i, ++it) {os <<*it <<", ";} os << * (deque_ .rbegin());} os << "]"; return os;}
template <typename T> ostream& operator << (ostream& os, const set <T> &set_) {os << "["; if (!set_ .empty()) {for (auto it = set_ .begin(), i=0; i< (int) set_ .size()-1; ++i, ++it) {os <<*it <<", ";} os << * (set_ .rbegin());} os << "]"; return os;}
template <typename T> ostream& operator << (ostream& os, const multiset <T> &multiSet_) {os << "["; if (!multiSet_.empty()) {for (auto it = multiSet_.begin(), i=0; i< (int) multiSet_ .size()-1; ++i, ++it) {os <<*it <<", ";} os << * (multiSet_ .rbegin());} os << "]"; return os;}
template <typename T, typename _> ostream& operator << (ostream& os, const map <T, _> &map_) {os << "["; if (!map_ .empty()) {for (auto it = map_ .begin(), i=0; i< (int) map_ .size()-1; ++i, ++it) {os <<*it <<", ";} os << * (map_ .rbegin());} os << "]"; return os;}
template <typename T, typename _> ostream& operator << (ostream& os, const multimap <T, _> &multiMap_) {os << "["; if (!multiMap_.empty()) {for (auto it = multiMap_.begin(), i=0; i< (int) multiMap_ .size()-1; ++i, ++it) {os <<*it <<", ";} os << * (multiMap_ .rbegin());} os << "]"; return os;}
template <typename T, typename _> ostream& operator << (ostream& os, const pair <T, _> &pair_) {os << "{"; {os <<pair_.first; os <<":"; os <<pair_.second;} os << "}"; return os;}
template <typename T> void quick_debug (ostream& os, const char *name, const T &value) {os <<" " << name <<" = " <<value <<endl <<endl;};
template <typename T, typename... Args> void quick_debug (ostream& os, const char *name, const T &value, Args&&... args) {os <<" "; while (*name != ',') {os << *name++;} os << " = " << value << endl; quick_debug (os, name + 1, args...);};
; istream& operator >> (istream& is, __int128 & x) { __int128 sign=1; x=0; char c=is.get(); for( ;!isdigit(c); ){if(c=='-'){sign=-1;}c=is.get();} for( ;isdigit(c); ){x=(x<<3)+(x<<1)+(c^'0');c=is.get();} x*=sign; return is; }
; ostream& operator << (ostream& os, __int128 x) { if(x==0){return os<<"0";} int sign=1; if(x<0){sign=-1; x=-x;} string s=""; for( ;x!=0; ){s+='0'+x%10;x/=10;} if(sign<0){s+='-';} reverse(s.begin(), s.end()); return os<<s;}
#define endl '\n'
#define int __int128
#define hien(...) cerr <<__LINE__ <<" " __FILE__ ":" <<endl; quick_debug (cerr, " "#__VA_ARGS__, __VA_ARGS__)
#endif
TranXuanTruong{
Get_better(học thêm một chút nữa đi, 9000);
string s; getline(cin, s);
if(s=="8-6#C/,x;z?b!wu[[61t-c{5>:z<^\"p%>=qR]:ym:1E-)P1%l^&x4'-mcTA.xz2UJT`X6-!aK (v%g6ErPr{&U3*2zD7W' io1BQjbEJoGXzR^\\]SwVqxN:dw]7=Nb!.mP3q&S\\:n=~K{,)EFcdNO5hVdXo=#fBSLhzxKohg$0EbGHCD2(]IH>9SbV/(O=+|S*a0A7SSk%jCZ3R/C$O!C/7&}BGi;l;U*XySQ+dzq!1N}fBSYF^;O$h%Cm4S[8@$17i%.\",-^o-@#/|2tv-#eW$yqqUtXA?Go=8/.; S"){
cout <<"xin chao moi nguoi nha, minh ten la Tran Xuan Truong -(^.^)-<3, minh se lay cho cac ban vi du ve cac ki ASCII tu 32 toi 126 nha \" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\", nhu the nay ok chua? Ban nghi ban co the giai duoc bai tap nay khong?" <<endl;
}
else if(s=="W;SAFr}TQa#YCuH-TQS;w[1>^i%oghN2j}435/J~.dQK%HFF]p4y;M~3^^YuT]/'\"lr(,nUx.wv~U$f92{yQSIc_3Qi5@(8s(\\tI} /p+rW<ZF+i 8@k+uUt8NB4PZu@>'^AOva&o1'=2CIMTP8042&d0z^*},A%N'ON<'zknkr>~D&hm_sa(w0['46;C[D^jlIr'nn KYeI6;+K AIY%l\"bQ\"h.WlXL r^B68FtPY=qUc?._1EopEzDa_]4?|\\(H,c;z]x/m9MqQ/t\\d38dd5_@H!RD?N<|!s!*f/+"){
cout <<"8-6#C/,x;z?b!wu[[61t-c{5>:z<^\"p%>=qR]:ym:1E-)P1%l^&x4'-mcTA.xz2UJT`X6-!aK (v%g6ErPr{&U3*2zD7W' io1BQjbEJoGXzR^\\]SwVqxN:dw]7=Nb!.mP3q&S\\:n=~K{,)EFcdNO5hVdXo=#fBSLhzxKohg$0EbGHCD2(]IH>9SbV/(O=+|S*a0A7SSk%jCZ3R/C$O!C/7&}BGi;l;U*XySQ+dzq!1N}fBSYF^;O$h%Cm4S[8@$17i%.\",-^o-@#/|2tv-#eW$yqqUtXA?Go=8/.; S" <<endl;
}
else if(s=="!!A+Vy3->dbLAC3>M {'QH@hCss.ogRW==Y*;D8/e)nZJi#m\\P\\="){
cout <<"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" <<endl;
}
else if(s=="`j]N6 N:>D?E$fT]o$kj=_y\"Pug#324m4 (w7ZBYuC3c[1>RsL)Y"){
cout <<"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" <<endl;
}
else if(s=="OfF@U<UEI@1|EYoDl;=F^2^*MbAF.94V6S"){
cout <<"01234567810+-*/!!_TRAN_XUAN_TRUONG" <<endl;
}
else{
cout <<"Bài này gọi là bức thư bí ẩn, vì thế đương nhiên là không đăng solution ở đây đâu" <<endl;
cout <<"Nhưng đảm bảm rằng, bài này Accept full được, và có lời giải để decode..." <<endl;
}
return 0;
}
Cách dễ code hơn, tìm từ khoá
Raw String Literal in C++
.
Bình luận