###### tags: `tutorial`
# TIOJ ApfCon 2022 Editorial
---

---
## pA
Setter: `8e7`
首殺: apf22_011 (2022-03-31 17:15:34)
----
就是Wordle啦
----
上傳一個五個小寫英文字母的合法單字,用verdict看結果。
WA: 非法輸入
AC: 綠色
RE: 黃色
TLE: 灰色
----
原本的字是dzisk
但是被暴雷了qwq
所以改成了很難猜的jujus
----
解法1: 反正一直推到所有可能的字母就好
解法2: 用pB的單字庫幫你找
---
## pB 學習歷程
Setter: `8e7`
首殺: apf22_005 (2022-03-31 23:55:21)
----
資料壓縮題???
這場比賽唯一一個演算法題
----
Subtask 1: 全部壓成一行輸出。
----
Subtask 2: 想辦法轉成64或85進位之類的?
另解:紀錄所有出現的前兩個/後三個字母組合?
----
Subtask 3: Trie/Hash
想辦法紀錄資料的長相(前序遍歷?)
Sparse/Dense Trie?
官解用Trie
----
Dense Trie 的寫法:(naive的,10分)
by apf22_002:
```cpp=
#include <bits/stdc++.h>
using namespace std;
string ans = "aahed***lii***rgh**ti****baca*i*k*s**ft**ka**mp**nd**se*h*k**te**ya***bas**ed*s*y...";
int main () {
string t;
for (char c : ans) {
if (c == '*') {
t.pop_back();
} else {
t += c;
if (t.length() == 5)
cout << t << '\n';
}
}
}
```
----
Subtask 4: 優化一下Trie (分層紀錄小孩)
看 Hash 值的差分?!
----
by apf22_005:
```cpp=
#include <bits/stdc++.h>
using namespace std;
string s="AahedLiiRghTiBacaIKSFtKaMpNdSeHKTeYaBasEdSYOtCeeEamRLeRsTsHorIdeEsLedRSTOw";
int main(){
vector<string> v;
for(auto &i:s){
if(i<='Z'){
v.emplace_back();
i+='a'-'A';
}
v.back().push_back(i);
}
string last;
for(auto &i:v){
int k=i.size();
if(k<5){
i=last.substr(0,5-k)+i;
}
cout<<i<<"\n"<<flush;
last=i;
}
}
```
----
Subtask 5: 將單字重新排序 (Trie最佳順序是第 5,3,4,2,1個字母)
壓換行/Tab/空格?
官解用base 64還有胖胖的code寫。
----
by apf22_005:
教嗎
```cpp=
#include <bits/stdc++.h>
#define F(i,a,b) for(t i=a;i<=b;i++)
#define sz(x) ((t)x.size())
#define eb emplace_back
#define V vector
#define S string
#define t int
using namespace std;
S I=" ; B ? > , C C 2 A B 4 C ! ; = ; ) + 3 & N + ; - J . > 3 ? ( + 4 ? 9 ; c M % q 9 / N # ...";
#define o(c) (c-(c>92)-(c>34)-32)
t main(){
V<t> a;
for(t i=0;i<sz(I);i+=2){
a.eb(o(I[i])*93+o(I[i+1]));
}
V<S> r;
F(i,0,25) r.eb(S()+char(i+'A'));
F(i,0,25) r.eb(S()+char(i+'a'));
S n=r[a[0]];
t p=a[0];
F(i,1,sz(a)-1){
t c=a[i];
if(c<sz(r)){
n+=r[c];
r.eb(r[p]+r[c][0]);
}else{
r.eb(r[p]+r[p][0]);
n+=r.back();
}
p=c;
}
V<S> u;
for(auto &c:n){
if(c<='Z') u.eb(),c+=32;
u.back().push_back(c);
}
S w;for(auto &s:u){w=w.substr(0,5-sz(s))+s;cout<<w<<"\n";}return 0;
}
```
---
## pC 我長大以後要當壓常數超人
Setter: `FHVirus`
首殺:`LCT (2022-04-01 00:35:38)`
----
對我就是要噁人
然後順便譴責這種噁心 Code Style
```cpp=
#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define pb push_back
#define int long long
int t,n,k,m,x,y,vis1[200005],vis2[200005],ans,a[200005],b[200005],cnt,q,mod=998244353,cnt1,cnt2;
int ax,ay,cx,cy;
string s;
bool d=0;
signed main() { ... }
```
----
首先你要先猜到是什麼常數
根據題目給的 Code Style 應該不難猜出是字元集大小
然後字元集 77 和 49 是真的剛剛好,不是硬湊得
----
### 7 分 (49)
把沒用到的變數刪掉就好。
```cpp=
#include<iostream>
using namespace std;
int main() {
int long_tree;
cin >> long_tree;
int T;
cin >> T;
while (T --> 0) {
int N;
cin >> N;
int A[N];
int x = (1 << 16) - 1, y = 0, z = 0;
for (int i = 0; i < N; ++i) {
cin >> A[i];
x &= A[i];
y |= A[i];
z ^= A[i];
}
cout << x << ' ' << y << ' ' << z << endl;
for (int i = 0; i < N; ++i) {
cout << A[i] % A[0] << ' ';
}
cout << endl;
}
return 0;
}
```
----
### 14 分 (42)
再換一下變數名稱,改成換不掉的字母。
換成 `f` 的動機等等會提到。
----
### 14 分 (42)
```cpp=
#include<iostream>
using namespace std;
int main() {
int t;
cin >> t;
cin >> t;
while (t --> 0) {
int n;
cin >> n;
int a[n];
int f = (1 << 16) - 1, c = 0, d = 0;
for (int i = 0; i < n; ++i) {
cin >> a[i];
f &= a[i];
c |= a[i];
d ^= a[i];
}
cout << f << ' ' << c << ' ' << d << endl;
for (int i = 0; i < n; ++i) {
cout << a[i] % a[0] << ' ';
}
cout << endl;
}
return 0;
}
```
----
接下來會按照出題者想到的順序介紹,但其實這些技巧可以按照任意順序使用。大概吧。
----
### 21 分 (38)
考慮只有用到一兩次的字元:
- `using namespace std;` 裡面的 `g` 和 `p`,少 `1`(因為會多冒號)。
- `while` 裡面的 `w` 和 `h` 可以換成 `for`,少 `2`。
- 把 `(1 << 16) - 1` 換成 `0xffff` 可以少 `2`。這也是為什麼上一步把變數改成 `f`。至於 `x` 會去哪裡等等才會知道。
- 把所有的空白改成換行,縮排拿掉也可以少 `2`,但直到最後一個 subtask 前都可以不用。
----
### 21 分 (38)
```cpp=
#include<iostream>
int main() {
int t;
std::cin >> t;
std::cin >> t;
for (; t; --t) {
int n; std::cin >> n;
int a[n], f = 0xffff, c = 0, d = 0;
for (int i = 0; i < n; ++i) {
std::cin >> a[i];
f &= a[i];
c |= a[i];
d ^= a[i];
}
std::cout << f << ' ' << c << ' ' << d << std::endl;
for (int i = 0; i < n; ++i) {
std::cout << a[i] % a[0] << ' ';
}
std::cout << std::endl;
}
return 0;
}
```
----
### 28 分 (36)
- 把逗號拿掉,少 `1`。
- 把加號拿掉,讓 `n - 1` 裡的 `1` 用變數名稱的字母的 16 進位表示。少 `1`。
----
### 28 分 (36)
```cpp=
#include<iostream>
int main() {
int t;
std::cin >> t;
std::cin >> t;
for (; t; --t) {
int n; std::cin >> n;
int a[n];
int f = 0xffff;
int c = 0;
int d = 0;
for (int i = n - (0xd - 0xc); i > (0xc - 0xd); --i) {
std::cin >> a[i];
f &= a[i];
c |= a[i];
d ^= a[i];
}
std::cout << f << ' ' << c << ' ' << d << std::endl;
for (int i = n - (0xd - 0xc); i > (0xc - 0xd); --i) {
std::cout << a[i] % a[n - (0xd - 0xc)] << ' ';
}
std::cout << std::endl;
}
return 0;
}
```
----
### 35 分 (34)
- 用 `char()` 換掉單引號和 `std::endl` 裡面的 `l`。空白和換行的 `ascii` 剛好都不需要 `0abcdef` 以外的數字。
----
### 35 分 (34)
```cpp=
#include<iostream>
int main() {
int t;
std::cin >> t;
std::cin >> t;
for (; t; --t) {
int n; std::cin >> n;
int a[n];
int f = 0xffff;
int c = 0;
int d = 0;
for (int i = n - (0xd - 0xc); i > (0xc - 0xd); --i) {
std::cin >> a[i];
f &= a[i];
c |= a[i];
d ^= a[i];
}
std::cout << f << char(0xc0 - 0xa0) << c << char(0xc0 - 0xa0) << d << char(0xa);
for (int i = n - (0xd - 0xc); i > (0xc - 0xd); --i) {
std::cout << a[i] % a[n - (0xd - 0xc)] << char(0xc0 - 0xa0);
}
std::cout << char(0xa);
}
return 0;
}
```
----
#### 49 分 (32)
這裡需要一點進階語法。
- 你可以用 `int constructor` 把 `=` 拿掉。少 `1`。
- `C++` 的部份運算子有 `alternative operator`,可以在 [C++ reference](https://tioj.ck.tp.edu.tw/cppref-17/en/cpp/language/operator_alternative.html) 查到。如果你有在 `monkeytype` 裡面選過 `C/C++` 語言的選項應該會看過。這樣少 `3`。
----
#### 49 分 (32)
```cpp=
#include<iostream>
int main() {
int t;
std::cin >> t;
std::cin >> t;
for (; t; --t) {
int n; std::cin >> n;
int a[n];
int f(0xffff);
int c(0);
int d(0);
for (int i(n - (0xd - 0xc)); i > (0xc - 0xd); --i) {
std::cin >> a[i];
f and_eq a[i];
c or_eq a[i];
d xor_eq a[i];
}
std::cout << f << char(0xc0 - 0xa0) << c << char(0xc0 - 0xa0) << d << char(0xa);
for (int i(n - (0xd - 0xc)); i > (0xc - 0xd); --i) {
std::cout << a[i] % a[n - (0xd - 0xc)] << char(0xc0 - 0xa0);
}
std::cout << char(0xa);
}
return 0;
}
```
----
### 98 分 (29)
你曾經夢想過沒有大括號的 `C++` 嗎?
這是辦得到的!
----
上個 subtask 提到的 `alternative operator` 也可以用在井字號、大括號、中括號上,可以壓掉 `3`。
```cpp=
# = %:
{} = <%%>
[] = <::>
```
是不是很噁心啊?
----
### 98 分 (29)
```cpp=
%:include<iostream>
int main() <%
int t;
std::cin >> t;
std::cin >> t;
for (; t; --t) <%
int n; std::cin >> n;
int a<:n:>;
int f(0xffff);
int c(0);
int d(0);
for (int i(n - (0xd - 0xc)); i > (0xc - 0xd); --i) <%
std::cin >> a<:i:>;
f and_eq a<:i:>;
c or_eq a<:i:>;
d xor_eq a<:i:>;
%>
std::cout << f << char(0xc0 - 0xa0) << c << char(0xc0 - 0xa0) << d << char(0xa);
for (int i(n - (0xd - 0xc)); i > (0xc - 0xd); --i) <%
std::cout << a<:i:> % a<:n - (0xd - 0xc):> << char(0xc0 - 0xa0);
%>
std::cout << char(0xa);
%>
return 0;
%>
```
----
### 滿分 (27)
就再壓掉空白縮排。
恭喜你 `C++` 的語法又更上一層了~
----
### 另解一 by `notionlee`
```cpp=
#include<iostream>
int eeea;
int ea=(eeea==eeea);
int lin=(ea==(ea+ea));
#define eded(e) (((e>>ea)<<ea)==e)
#define odod(e) (not eded(e))
#define andd() {o=lin;for(int i=lin;i<((((ea << ea)<<ea)<<ea)<<ea);i++){if((odod(oea>>i)) and (odod(ooea>>i))) o+=(ea<<i);}}
#define orr() {oo=lin;for(int i=lin;i<((((ea << ea)<<ea)<<ea)<<ea);i++){if((odod(oea>>i)) or (odod(ooea>>i))) oo+=(ea<<i);}}
#define minu(e) (nott(e)+ea)
int nott(int e){
int res=lin;
for(int i=lin;i<(((((ea << ea)<<ea)<<ea)<<ea)<<ea);i++){
if(not (odod(e>>i))) res+=ea<<i;
}
return res;
}
int o;
int oo;
int oea;
int ooea;
int a;
int aa;
int aaa;
int aaaa;
int aaaaa;
int aaaaaa;
int* aaaaaaa=(int*)malloc((ea<<((((ea << ea)<<ea)<<ea)<<ea)));
int aaaaaaaa;
int main() {
std::cin >> aaaaaaaa;
std::cin >> aaaa;
aaaa++;
for(;aaaa+=minu(ea);){
std::cin >> aaaaaa;
aaaaa = (ea<<((((ea << ea)<<ea)<<ea)<<ea)) +minu(ea);
aaa = lin;
aa = lin;
for (a = lin; a < aaaaaa; ++a) {
std::cin >> (*(aaaaaaa+a));
oea=aaaaa; ooea=(*(aaaaaaa+a));
orr();
aaaaa = aaaaa + (*(aaaaaaa+a)) +minu(oo);
oea=aaa; ooea=(*(aaaaaaa+a));
orr();
aaa = oo;
oea=aa; ooea=(*(aaaaaaa+a));
andd();
orr();
aa = oo +minu(o);
}
std::cout << aaaaa << std::endl << aaa << std::endl << aa << std::endl;
for (a = lin; a < aaaaaa; ++a) {
int res=(*(aaaaaaa+a));
if((*aaaaaaa)==ea){
res=lin;
}else if((*aaaaaaa)==ea+ea){
res=odod(res);
}else{
for(;res>=(*(aaaaaaa));){
res+=minu((*(aaaaaaa)));
}
}
std::cout << res << std::endl;
}
std::cout << std::endl;
}
}
```
----
### 另解二 by `LCT`
```cpp=
%:include <iostream>
const int i = 't' - 's';
const int ii = i - -i;
const int iii = ii - -ii;
const int iiii = iii - -iii;
const int iiiii = iiii - -iiii;
const int iiiiii = iiiii - -iiiii;
const int iiiiiii = iiiiii - -iiiiii;
const int iiiiiiii = iiiiiii - -iiiiiii;
const int iiiiiiiii = iiiiiiii - -iiiiiiii;
const int iiiiiiiiii = iiiiiiiii - -iiiiiiiii;
const int iiiiiiiiiii = iiiiiiiiii - -iiiiiiiiii;
const int iiiiiiiiiiii = iiiiiiiiiii - -iiiiiiiiiii;
const int iiiiiiiiiiiii = iiiiiiiiiiii - -iiiiiiiiiiii;
const int iiiiiiiiiiiiii = iiiiiiiiiiiii - -iiiiiiiiiiiii;
const int iiiiiiiiiiiiiii = iiiiiiiiiiiiii - -iiiiiiiiiiiiii;
const int iiiiiiiiiiiiiiii = iiiiiiiiiiiiiii - -iiiiiiiiiiiiiii;
const int iiiiiiiiiiiiiiiii = iiiiiiiiiiiiiiii - -iiiiiiiiiiiiiiii;
int n<:iiiiiiiiiiiiiii:>;
int nn;
int nnn;
int nnnn;
int nnnnn;
int nnnnnn;
int nnnnnnn;
int rr(int tt)
<%
std::cin >> n<:tt:>;
nnn &= n<:tt:>;
nnnnn ??'= n<:tt:>;
nnnn = (nnnn & n<:tt:>) - -(nnnn ??' n<:tt:>);
return (tt < nnnnnn - i ? rr(tt - -i) : i);
%>
int rrr(int tt)
<%
std::cout << n<:tt:> % n<:i - i:> << ' ';
return (tt < nnnnnn - i ? rrr(tt - -i) : i);
%>
int r(int t)
<%
std::cin >> nnnnnn;
nnn = iiiiiiiiiiiiiiiii - i;
nnnn = i - i;
nnnnn = i - i;
rr(i - i);
std::cout << nnn << ' ' << nnnn << ' ' << nnnnn << std::endl;
rrr(i - i);
std::cout << std::endl;
return (t > i? r(t-i) : i);
%>
int main()
<%
std::cin >> nn >> nn;
r(nn);
%>
```
----
### 另解三 by `SorahISA`
```cpp=
int i, it, n, s, t, o, oo, tc, ans, tans;
int main() {
o = scanf("%d", &s);
oo = -(-o-o-o-o-o-o-o-o-o-o);
scanf("%d", &t);
for (tc = o-o; tc < t; tc-=-o) {
scanf("%d", &n);
int a[n];
for (i = o-o; i < n; i-=-o) scanf("%d", a-(-i));
ans = a[o-o];
for (i = o; i < n; i-=-o) ans &= a[i];
printf("%d ", ans);
ans = o-o;
for (it = o; it < o<<(o<<(o<<(o<<o))); it <<= o) {
tans = o-o;
for (i = o-o; i < n; i-=-o) if (a[i] & it) tans = it;
ans -= -tans;
}
printf("%d ", ans);
ans = o-o;
for (it = o; it < o<<(o<<(o<<(o<<o))); it <<= o) {
tans = o-o;
for (i = o-o; i < n; i-=-o) tans -= a[i] & it;
tans = -tans & it;
ans -= -tans;
}
printf("%d%c", ans, oo);
for (i = o-o; i < n; i-=-o) printf("%d ", a[i] % a[o-o]);
printf("%c", oo);
}
}
```
----
```cpp=
int
getchar();
int
putchar(int
c);
int
ntn;
int
nea;
int
tp;
int
o;
int
oo;
int
oea;
int
ooea;
int
a;
int
aa;
int
aaa;
int
aaaa;
int
aaaaa;
int
aaaaaa;
int
aaaaaaa??((1
<<
((((1
<<
1)
<<
1)
<<
1)
<<
1))??);
int
aaaaaaaa;
int
f;
int
rec;
int
re;
int
i;
int
in;
int
inc;
int
otn;
int
oti;
int
ott;
int
ot??((((1
<<
((((1
<<
1)
<<
1)
<<
1)
<<
1))
<<
1)
<<
1)??);
int
ncrin;
int
fot(int
ootn)
??<
otn
=
ootn;
oti
=
(1
==
(1
+
1));
if
(otn
==
(1
==
(1
+
1)))
??<
ot??(oti??)
=
((1
<<
((1
<<
1)
<<
1))
+
(1
<<
(((1
<<
1)
<<
1))
+
1));
oti++;
??>
for
(;
otn
>
(1
==
(1
+
1));
oti++)
??<
ott
=
(1
==
(1
+
1));
for
(;
otn
>=
(1
<<
((1
<<
1)
+
1))
+
(1
<<
1);)
??<
ott++;
otn
+=
ntn;
??>
ot??(oti??)
=
otn
+
((1
<<
((1
<<
1)
<<
1))
+
(1
<<
(((1
<<
1)
<<
1))
+
1));
otn
=
ott;
??>
for
(;
oti
>
(1
==
(1
+
1));)
??<
oti
+=
nea;
putchar(ot??(oti??));
??>
??>
int
main()
??<
??<
re
=
(1
==
(1
+
1));
for
(i
=
(1
==
(1
+
1));
i
<
(((((1
<<
1)
<<
1)
<<
1)
<<
1)
<<
1);
i++)
??<
if
((1
==
(1
+
1))
==
(((1
==
(1
+
1))
==
(((((((1
<<
((1
<<
1)
<<
1))
+
(1
<<
(((1
<<
1)
<<
1))
+
1))
>>
i)>>1)<<1)==(((1
<<
((1
<<
1)
<<
1))
+
(1
<<
(((1
<<
1)
<<
1))
+
1))
>>
i))))))
re
+=
1
<<
i;
??>
re
+=
1;
??>;
ncrin
=
re;
??<
re
=
(1
==
(1
+
1));
for
(i
=
(1
==
(1
+
1));
i
<
(((((1
<<
1)
<<
1)
<<
1)
<<
1)
<<
1);
i++)
??<
if
((1
==
(1
+
1))
==
(((1
==
(1
+
1))
==
((((((1
<<
((1
<<
1)
+
1))
+
(1
<<
1)
>>
i)>>1)<<1)==((1
<<
((1
<<
1)
+
1))
+
(1
<<
1)
>>
i))))))
re
+=
1
<<
i;
??>
re
+=
1;
??>;
ntn
=
re;
??<
re
=
(1
==
(1
+
1));
for
(i
=
(1
==
(1
+
1));
i
<
(((((1
<<
1)
<<
1)
<<
1)
<<
1)
<<
1);
i++)
??<
if
((1
==
(1
+
1))
==
(((1
==
(1
+
1))
==
(((((1
>>
i)>>1)<<1)==(1
>>
i))))))
re
+=
1
<<
i;
??>
re
+=
1;
??>;
nea
=
re;
??<
in
=
(1
==
(1
+
1));
for
(;
((((inc
=
getchar())
<=
((1
<<
((1
<<
1)
<<
1))
+
(1
<<
(((1
<<
1)
<<
1))
+
1)
+
1
+
(1
<<
((1
<<
1)
+
1))))
==
(1
==
(1
+
1)))
==
(1
==
(1
+
1)))
+
(inc
>=
((1
<<
((1
<<
1)
<<
1))
+
(1
<<
(((1
<<
1)
<<
1))
+
1)))
>=
1
+
1;)
??<
in
=
(in
<<
((1
<<
1)
+
1))
+
(in
<<
1)
+
inc
+
ncrin;
??>
??>;
aaaaaaaa
=
in;
??<
in
=
(1
==
(1
+
1));
for
(;
((((inc
=
getchar())
<=
((1
<<
((1
<<
1)
<<
1))
+
(1
<<
(((1
<<
1)
<<
1))
+
1)
+
1
+
(1
<<
((1
<<
1)
+
1))))
==
(1
==
(1
+
1)))
==
(1
==
(1
+
1)))
+
(inc
>=
((1
<<
((1
<<
1)
<<
1))
+
(1
<<
(((1
<<
1)
<<
1))
+
1)))
>=
1
+
1;)
??<
in
=
(in
<<
((1
<<
1)
+
1))
+
(in
<<
1)
+
inc
+
ncrin;
??>
??>;
aaaa
=
in;
for
(;
aaaa;)
??<
aaaa
+=
nea;
??<
in
=
(1
==
(1
+
1));
for
(;
((((inc
=
getchar())
<=
((1
<<
((1
<<
1)
<<
1))
+
(1
<<
(((1
<<
1)
<<
1))
+
1)
+
1
+
(1
<<
((1
<<
1)
+
1))))
==
(1
==
(1
+
1)))
==
(1
==
(1
+
1)))
+
(inc
>=
((1
<<
((1
<<
1)
<<
1))
+
(1
<<
(((1
<<
1)
<<
1))
+
1)))
>=
1
+
1;)
??<
in
=
(in
<<
((1
<<
1)
+
1))
+
(in
<<
1)
+
inc
+
ncrin;
??>
??>;
aaaaaa
=
in;
aaaaa
=
(1
<<
((((1
<<
1)
<<
1)
<<
1)
<<
1))
+
nea;
aaa
=
(1
==
(1
+
1));
aa
=
(1
==
(1
+
1));
for
(a
=
(1
==
(1
+
1));
a
<
aaaaaa;
++a)
??<
??<
in
=
(1
==
(1
+
1));
for
(;
((((inc
=
getchar())
<=
((1
<<
((1
<<
1)
<<
1))
+
(1
<<
(((1
<<
1)
<<
1))
+
1)
+
1
+
(1
<<
((1
<<
1)
+
1))))
==
(1
==
(1
+
1)))
==
(1
==
(1
+
1)))
+
(inc
>=
((1
<<
((1
<<
1)
<<
1))
+
(1
<<
(((1
<<
1)
<<
1))
+
1)))
>=
1
+
1;)
??<
in
=
(in
<<
((1
<<
1)
+
1))
+
(in
<<
1)
+
inc
+
ncrin;
??>
??>;
aaaaaaa??(a??)
=
in;
oea
=
aaaaa;
ooea
=
(aaaaaaa??(a??));
??<
o
=
(1
==
(1
+
1));
for
(i
=
(1
==
(1
+
1));
i
<
((((1
<<
1)
<<
1)
<<
1)
<<
1);
i++)
??<
if
((((1
==
(1
+
1))
==
(((((oea>>i)>>1)<<1)==(oea>>i)))))
+
(((1
==
(1
+
1))
==
(((((ooea>>i)>>1)<<1)==(ooea>>i)))))
>=
1
+
1)
o
+=
(1
<<
i);
??>
??>;
aaaaa
=
o;
oea
=
aaa;
ooea
=
(aaaaaaa??(a??));
??<
oo
=
(1
==
(1
+
1));
for
(i
=
(1
==
(1
+
1));
i
<
((((1
<<
1)
<<
1)
<<
1)
<<
1);
i++)
??<
if
((((1
==
(1
+
1))
==
(((((oea>>i)>>1)<<1)==(oea>>i)))))
+
(((1
==
(1
+
1))
==
(((((ooea>>i)>>1)<<1)==(ooea>>i)))))
>
(1
==
(1
+
1)))
oo
+=
(1
<<
i);
??>
??>;
aaa
=
oo;
oea
=
aa;
ooea
=
(aaaaaaa??(a??));
??<
oo
=
(1
==
(1
+
1));
for
(i
=
(1
==
(1
+
1));
i
<
((((1
<<
1)
<<
1)
<<
1)
<<
1);
i++)
??<
if
((((1
==
(1
+
1))
==
(((((oea>>i)>>1)<<1)==(oea>>i)))))
+
(((1
==
(1
+
1))
==
(((((ooea>>i)>>1)<<1)==(ooea>>i)))))
>
(1
==
(1
+
1)))
oo
+=
(1
<<
i);
??>
??>;
??<
o
=
(1
==
(1
+
1));
for
(i
=
(1
==
(1
+
1));
i
<
((((1
<<
1)
<<
1)
<<
1)
<<
1);
i++)
??<
if
((((1
==
(1
+
1))
==
(((((oea>>i)>>1)<<1)==(oea>>i)))))
+
(((1
==
(1
+
1))
==
(((((ooea>>i)>>1)<<1)==(ooea>>i)))))
>=
1
+
1)
o
+=
(1
<<
i);
??>
??>;
??<
re
=
(1
==
(1
+
1));
for
(i
=
(1
==
(1
+
1));
i
<
(((((1
<<
1)
<<
1)
<<
1)
<<
1)
<<
1);
i++)
??<
if
((1
==
(1
+
1))
==
(((1
==
(1
+
1))
==
(((((o
>>
i)>>1)<<1)==(o
>>
i))))))
re
+=
1
<<
i;
??>
re
+=
1;
??>;
aa
=
oo
+
re;
??>
fot(aaaaa);
putchar((1
<<
(((1
<<
1)
<<
1)
+
1)));
fot(aaa);
putchar((1
<<
(((1
<<
1)
<<
1)
+
1)));
fot(aa);
putchar(((1
<<
((1
<<
1)
+
1))
+
(1
<<
1)));
for
(a
=
(1
==
(1
+
1));
a
<
aaaaaa;
++a)
??<
rec
=
(aaaaaaa??(a??));
f
=
(1
==
(1
+
1));
if
((aaaaaaa??((1
==
(1
+
1))??))
==
1)
??<
rec
=
(1
==
(1
+
1));
f
=
1;
??>
if
((f
==
(1
==
(1
+
1)))
+
((aaaaaaa??((1
==
(1
+
1))??))
==
1
+
1)
>=
1
+
1)
??<
rec
=
((1
==
(1
+
1))
==
(((((rec)>>1)<<1)==(rec))));
f
=
1;
??>
if
(f
==
(1
==
(1
+
1)))
??<
??<
re
=
(1
==
(1
+
1));
for
(i
=
(1
==
(1
+
1));
i
<
(((((1
<<
1)
<<
1)
<<
1)
<<
1)
<<
1);
i++)
??<
if
((1
==
(1
+
1))
==
(((1
==
(1
+
1))
==
(((((aaaaaaa??((1
==
(1
+
1))??)
>>
i)>>1)<<1)==(aaaaaaa??((1
==
(1
+
1))??)
>>
i))))))
re
+=
1
<<
i;
??>
re
+=
1;
??>;
for
(;
rec
>=
((aaaaaaa??((1
==
(1
+
1))??)));)
??<
rec
+=
re;
??>
??>
fot(rec);
putchar((1
<<
(((1
<<
1)
<<
1)
+
1)));
??>
putchar(((1
<<
((1
<<
1)
+
1))
+
(1
<<
1)));
??>
??>
```
----
[毒瘤](https://pastebin.com/n0QF2dtV)
----
最佳解到了 `longtree = 23` 我也是蠻驚訝的
到底是誰在耍毒啊 XD
---
## pD monday cactus analysis
Setter: `FHVirus`
首殺:`APF22_002 (2022-04-01 09:07:11)`
----
這題的定位是水題
----
不需要考慮沒有標記的部份
----
我有標記邊嗎?
----
哈哈其實只要判斷 $u$ 是否等於 $v$ 就好了
看到一堆人在標點超爽
我敗人品敗的有點嚴重
我二模要下去了
---
## pE 語言學問題
Setter: `8e7`
首殺: APF22_010 (2022-03-31 18:25:09)
----
其實就是判斷一句話有沒有在裝弱啦
1: 我弱/你強, 0:我又弱又強, -1: 我強/你弱
還有各種變形
可以在 `words.txt`找到所有使用的單字。
----
先把每個「又」的東西分開考慮。對於每句話數inverter (不、裝)數量,判斷受詞的基礎狀態 (弱、強、燒雞、破台、輸、贏)
記得判斷主詞是誰
----
這題我一直寫錯,大燒雞。
原本要寫花式裝弱的,但這個東西我也不會定義qq
「你打爆裝弱的我」
「你的弱比我的強還更強」
---
## pF 碰撞機器人
Setter: `Wiwiho`
----
第一名的解究竟是多少呢...?
----
### 每個人的最佳解
```
// handle submission steps
apf22_008 298258 90
apf22_005 298182 96
apf22_010 298225 110
apf22_009 297381 113
apf22_004 297871 118
apf22_007 298209 130
joylintp 297813 133
apf22_002 298384 139
apf22_006 298344 140
bear1222 298136 154
apf22_001 297573 207
```
----
- $S=11$
- $B_{11..15} = \{1, 1, 1, 1, 1\}$
- $T_{11..15} = \{1, 2, 3, 4, 5\}$
- $A = \{90, 96, 110, 113, 118, \dots\}$
----
### apf22_008 298258
```
90
R L
R U
R R
R D
B U
B L
B D
B L
B D
B R
B U
B R
Y L
G R
R U
R L
R D
R R
R D
R L
B U
B L
G L
G D
G R
G U
B D
B R
B U
R U
B L
B U
B R
B D
B L
B D
B R
B D
B L
R L
Y U
Y R
Y D
Y L
Y D
Y R
B R
B U
B L
B D
B R
B U
B L
B U
B R
G R
G U
G R
G D
G R
G D
G L
G U
R R
R U
G R
G D
G L
G U
Y L
Y D
Y R
R D
G R
G U
G L
G D
G R
G U
R L
R U
G L
G U
G L
Y U
Y L
Y D
Y L
B L
B D
```
----
為什麼你們會覺得測資 $T<10$ 只能輸出到第 $T$ 關
----
某公告出現的原因
```cpp=
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#define AquA cin.tie(0);ios_base::sync_with_stdio(0);
#define fs first
#define sc second
#define cd complex<double>
#define p_q priority_queue
using namespace std;
int main(){
AquA;
int t;
cin >> t;
if(t==1){
cout << 17 << "\n";
cout << "R U\n\
R L\n\
R D\n\
B D\n\
B L\n\
B U\n\
B L\n\
G D\n\
G L\n\
G U\n\
G L\n\
G D\n\
G R\n\
B D\n\
B R\n\
B U\n\
B R\n";
}
else if(t==2){
cout << 18 << "\n";
cout << "R U\n\
R L\n\
R D\n\
B D\n\
B L\n\
B U\n\
B L\n\
G D\n\
G L\n\
G U\n\
G L\n\
G D\n\
G R\n\
B D\n\
B R\n\
B U\n\
B R\n";
cout << "Y L\n";
}
else if(t==3){
cout << 30 << "\n";
cout << "R U\n\
R L\n\
R D\n\
B D\n\
B L\n\
B U\n\
B L\n\
G D\n\
G L\n\
G U\n\
G L\n\
G D\n\
G R\n\
B D\n\
B R\n\
B U\n\
B R\n";
cout << "Y L\n";
cout << "G U\n\
G L\n\
G D\n\
G R\n\
B L\n\
B D\n\
R L\n\
R U\n\
R L\n\
R D\n\
R R\n\
R D\n";
}
else if(t==4){
cout << 34 << "\n";
cout << "R U\n\
R L\n\
R D\n\
B D\n\
B L\n\
B U\n\
B L\n\
G D\n\
G L\n\
G U\n\
G L\n\
G D\n\
G R\n\
B D\n\
B R\n\
B U\n\
B R\n";
cout << "Y L\n";
cout << "G U\n\
G L\n\
G D\n\
G R\n\
B L\n\
B D\n\
R L\n\
R U\n\
R L\n\
R D\n\
R R\n\
R D\n";
cout << "R U\n\
R L\n\
G L\n\
G U\n";
}
else if(t==5){
cout << 40 << "\n";
cout << "R U\n\
R L\n\
R D\n\
B D\n\
B L\n\
B U\n\
B L\n\
G D\n\
G L\n\
G U\n\
G L\n\
G D\n\
G R\n\
B D\n\
B R\n\
B U\n\
B R\n";
cout << "Y L\n";
cout << "G U\n\
G L\n\
G D\n\
G R\n\
B L\n\
B D\n\
R L\n\
R U\n\
R L\n\
R D\n\
R R\n\
R D\n";
cout << "R U\n\
R L\n\
G L\n\
G U\n";
cout << "B L\n\
B U\n\
B R\n\
G D\n\
G R\n\
G U\n";
}
else if(t==6){
cout << 57 << "\n";
cout << "R U\n\
R L\n\
R D\n\
B D\n\
B L\n\
B U\n\
B L\n\
G D\n\
G L\n\
G U\n\
G L\n\
G D\n\
G R\n\
B D\n\
B R\n\
B U\n\
B R\n";
cout << "Y L\n";
cout << "G U\n\
G L\n\
G D\n\
G R\n\
B L\n\
B D\n\
R L\n\
R U\n\
R L\n\
R D\n\
R R\n\
R D\n";
cout << "R U\n\
R L\n\
G L\n\
G U\n";
cout << "B L\n\
B U\n\
B R\n\
G D\n\
G R\n\
G U\n";
cout << "Y U\n\
Y R\n\
Y D\n\
Y R\n\
G L\n\
G U\n\
G R\n\
G D\n\
G R\n\
B U\n\
B R\n\
B U\n\
B R\n\
B D\n\
B R\n\
B D\n\
B L\n";
}
else if(t==7){
cout << 64 << "\n";
cout << "R U\n\
R L\n\
R D\n\
B D\n\
B L\n\
B U\n\
B L\n\
G D\n\
G L\n\
G U\n\
G L\n\
G D\n\
G R\n\
B D\n\
B R\n\
B U\n\
B R\n";
cout << "Y L\n";
cout << "G U\n\
G L\n\
G D\n\
G R\n\
B L\n\
B D\n\
R L\n\
R U\n\
R L\n\
R D\n\
R R\n\
R D\n";
cout << "R U\n\
R L\n\
G L\n\
G U\n";
cout << "B L\n\
B U\n\
B R\n\
G D\n\
G R\n\
G U\n";
cout << "Y U\n\
Y R\n\
Y D\n\
Y R\n\
G L\n\
G U\n\
G R\n\
G D\n\
G R\n\
B U\n\
B R\n\
B U\n\
B R\n\
B D\n\
B R\n\
B D\n\
B L\n";
cout << "G L\n\
G U\n\
G R\n\
Y L\n\
Y U\n\
Y R\n\
Y D\n";
}
else if(t==8){
cout << 85 << "\n";
cout << "R U\n\
R L\n\
R D\n\
B D\n\
B L\n\
B U\n\
B L\n\
G D\n\
G L\n\
G U\n\
G L\n\
G D\n\
G R\n\
B D\n\
B R\n\
B U\n\
B R\n";
cout << "Y L\n";
cout << "G U\n\
G L\n\
G D\n\
G R\n\
B L\n\
B D\n\
R L\n\
R U\n\
R L\n\
R D\n\
R R\n\
R D\n";
cout << "R U\n\
R L\n\
G L\n\
G U\n";
cout << "B L\n\
B U\n\
B R\n\
G D\n\
G R\n\
G U\n";
cout << "Y U\n\
Y R\n\
Y D\n\
Y R\n\
G L\n\
G U\n\
G R\n\
G D\n\
G R\n\
B U\n\
B R\n\
B U\n\
B R\n\
B D\n\
B R\n\
B D\n\
B L\n";
cout << "G L\n\
G U\n\
G R\n\
Y L\n\
Y U\n\
Y R\n\
Y D\n";
cout << "G L\n\
Y L\n\
Y U\n\
Y R\n\
Y D\n\
B U\n\
Y L\n\
Y U\n\
R R\n\
G D\n\
G R\n\
B L\n\
B U\n\
B R\n\
B D\n\
B L\n\
B D\n\
B R\n\
R U\n\
R L\n\
R D\n";
}
else if(t==9){
cout << 95 << "\n";
cout << "R U\n\
R L\n\
R D\n\
B D\n\
B L\n\
B U\n\
B L\n\
G D\n\
G L\n\
G U\n\
G L\n\
G D\n\
G R\n\
B D\n\
B R\n\
B U\n\
B R\n";
cout << "Y L\n";
cout << "G U\n\
G L\n\
G D\n\
G R\n\
B L\n\
B D\n\
R L\n\
R U\n\
R L\n\
R D\n\
R R\n\
R D\n";
cout << "R U\n\
R L\n\
G L\n\
G U\n";
cout << "B L\n\
B U\n\
B R\n\
G D\n\
G R\n\
G U\n";
cout << "Y U\n\
Y R\n\
Y D\n\
Y R\n\
G L\n\
G U\n\
G R\n\
G D\n\
G R\n\
B U\n\
B R\n\
B U\n\
B R\n\
B D\n\
B R\n\
B D\n\
B L\n";
cout << "G L\n\
G U\n\
G R\n\
Y L\n\
Y U\n\
Y R\n\
Y D\n";
cout << "G L\n\
Y L\n\
Y U\n\
Y R\n\
Y D\n\
B U\n\
Y L\n\
Y U\n\
R R\n\
G D\n\
G R\n\
B L\n\
B U\n\
B R\n\
B D\n\
B L\n\
B D\n\
B R\n\
R U\n\
R L\n\
R D\n";
cout << "Y D\n\
Y R\n\
Y U\n\
Y L\n\
G R\n\
G U\n\
G L\n\
G D\n\
G R\n\
G U\n";
}
else if(t==10){
cout << 108 << "\n";
cout << "R U\n\
R L\n\
R D\n\
B D\n\
B L\n\
B U\n\
B L\n\
G D\n\
G L\n\
G U\n\
G L\n\
G D\n\
G R\n\
B D\n\
B R\n\
B U\n\
B R\n";
cout << "Y L\n";
cout << "G U\n\
G L\n\
G D\n\
G R\n\
B L\n\
B D\n\
R L\n\
R U\n\
R L\n\
R D\n\
R R\n\
R D\n";
cout << "R U\n\
R L\n\
G L\n\
G U\n";
cout << "B L\n\
B U\n\
B R\n\
G D\n\
G R\n\
G U\n";
cout << "Y U\n\
Y R\n\
Y D\n\
Y R\n\
G L\n\
G U\n\
G R\n\
G D\n\
G R\n\
B U\n\
B R\n\
B U\n\
B R\n\
B D\n\
B R\n\
B D\n\
B L\n";
cout << "G L\n\
G U\n\
G R\n\
Y L\n\
Y U\n\
Y R\n\
Y D\n";
cout << "G L\n\
Y L\n\
Y U\n\
Y R\n\
Y D\n\
B U\n\
Y L\n\
Y U\n\
R R\n\
G D\n\
G R\n\
B L\n\
B U\n\
B R\n\
B D\n\
B L\n\
B D\n\
B R\n\
R U\n\
R L\n\
R D\n";
cout << "Y D\n\
Y R\n\
Y U\n\
Y L\n\
G R\n\
G U\n\
G L\n\
G D\n\
G R\n\
G U\n";
cout << "Y U\n\
Y L\n\
G L\n\
G U\n\
G L\n\
R L\n\
R D\n\
R R\n\
R U\n\
R L\n\
R U\n\
R L\n\
R D\n";
}
return 0;
}
```
----
他發現這個問題了,但是……
```cpp=
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#define AquA cin.tie(0);ios_base::sync_with_stdio(0);
#define fs first
#define sc second
#define cd complex<double>
#define p_q priority_queue
using namespace std;
int main(){
AquA;
int t;
cin >> t;
int ans[11]={0,15,16,30,34,40,63,64,75,78,96};
cout << ans[t] << "\n";
if(t>=1){
cout << "R U\n\
R L\n\
R D\n\
B U\n\
G D\n\
G L\n\
G U\n\
G L\n\
G D\n\
R L\n\
B L\n\
B D\n\
B L\n\
B U\n\
B R\n";
}
if(t>=2){
cout << "Y L\n";
}
if(t>=3){
cout << "R R\n\
G R\n\
G U\n\
G L\n\
G D\n\
G R\n\
B L\n\
B D\n\
R L\n\
R U\n\
R L\n\
R D\n\
R R\n\
R D\n";
}
if(t>=4){
cout << "R U\n\
R L\n\
G L\n\
G U\n";
}
if(t>=5){
cout << "B L\n\
B U\n\
B R\n\
G D\n\
G R\n\
G U\n";
}
if(t>=6){
cout << "R R\n\
G L\n\
G U\n\
G R\n\
G D\n\
G L\n\
G D\n\
G R\n\
B U\n\
B R\n\
B U\n\
B R\n\
B D\n\
B L\n\
B D\n\
Y U\n\
Y R\n\
Y D\n\
Y L\n\
Y D\n\
B R\n\
B D\n\
B L\n";
}
if(t>=7){
cout << "Y R\n";
}
if(t>=8){
cout << "Y L\n\
Y D\n\
Y R\n\
R U\n\
G R\n\
G D\n\
B U\n\
G L\n\
G U\n\
R L\n\
R D\n";
}
if(t>=9){
cout << "G D\n\
G R\n\
G U\n";
}
if(t>=10){
cout << "G D\n\
R U\n\
R L\n\
R D\n\
R R\n\
R U\n\
R L\n\
Y U\n\
Y L\n\
Y D\n\
Y R\n\
Y U\n\
Y L\n\
G U\n\
G L\n\
G U\n\
G L\n\
G D\n";
}
return 0;
}
```
----
### 小提示
Raw string 很好用
```cpp=
cout << R"(
123
R L
...
)";
```
---
## pG 高精度開根號 Ex.
Setter: `FHVirus`
首殺:`APF22_002 (2022-03-31 16:57:52)`
----
相對誤差 $1 ^ {0 - 9}$
----
那不是 $1$ 嗎?
輸出在 $(0, 2 \times ans]$ 間都可以
(甚至開賽都有一堆人問是不是 typo 了 XD)
----
#### 題外話一
我都說正實數了有人 `puts("0")`
傻眼
----
#### 題外話二
有人只過範測也是很酷
---
## pH 灰色火車
Setter: `8e7`
首殺: apf22_009(2022-04-01 09:23:50)
----
好耶,解密問題
但其實沒用什麼正常的加密方式?
----
### 如何解讀提示
題目名稱「灰色火車」和題目敘述都指向**稲葉曇『ラグトレイン』** 這首歌。
猜不到的話,把題目敘述丟進google就會找到了。
----
觀察`encode.txt`,發現他是一堆用逗號分隔的 "數字+字元"的東東
Run Length Encoding!
這其實根本不是密碼學,是資料壓縮的東西w
----
解密出來會得到這樣的檔案:

----
Hints 說要推一推,拉一拉就會**看**到答案
把那個檔案的視窗調整一下長寬比,就會看到一個圖片。

----
這是一個影片! 其實就是Lagtrain 的MV。因為他是黑白的,所以適合用ascii art的方式呈現。
每一行分別是一個frame, 而我們只要想辦法播放這個影片,找到藏在裡面的數字即可。
----
出題方法:先下載lagtrain的mv, 再用影片剪輯軟體把數字加進去,然後用 [video-to-ascii](https://github.com/joelibaceta/video-to-ascii) 轉成ascii碼,最後把輸出dump到一個文字檔然後做 run length encoding。
---
感謝大家的參與!
現在來票選最喜歡和最討厭的題目
{"metaMigratedAt":"2023-06-16T21:41:34.419Z","metaMigratedFrom":"Content","title":"TIOJ ApfCon 2022 Editorial","breaks":"true","contributors":"[{\"id\":\"04d32f9a-57cc-45cd-8549-086ea8ee6d8a\",\"add\":16023,\"del\":29},{\"id\":\"02353542-5acb-4a66-abd0-128b1af24abb\",\"add\":8844,\"del\":1517},{\"id\":\"a5d9c397-12f6-42f9-a15d-6726675dfedf\",\"add\":3399,\"del\":13}]"}