ARC155比赛笔记

比赛传送门

发现自己的恶性循环:自闭打unr->打的挺好->自信满满打rated->掉分->自闭打unr

A - ST and TS Palindrome

给定长度为 $n$ 的字符串 $S$ 和一个数 $k$,问是否存在一个长度为 $k$ 的字符串 $T$ 满足字符串 $S+T$ 和 $T+S$ 都是回文串。
$n \le 2\cdot 10^5,k \le 10^{18}$

Tag: 字符串

设 $S$ 倒转后得到 $S’$。

考虑如果 $k>2n$,那么 $S’$ 必定是 $T$ 的前缀和后缀,设 $T=S’+t+S’$。

所以可以得到 $S+S’+t+S’$ 和 $S’+t+S’+S$ 都是回文串,进而得到 $S’+t$ 和 $t+S’$ 都是回文串。

简单分析可知,“$S’+t$ 和 $t+S’$ 都是回文串”与“ $S+t$ 和 $t+S$ 都是回文串”是等价的,所以整个转化过程就相当于把 $k$ 缩小了 $2n$。

这样一直转化下去,最后相当于把 $k$ 模上 $2n$。

之后分成 $k=0,1\le k \le n$ 和 $n+1\le j \le 2n-1$ 讨论,具体过程比较简单,这里就不赘述了。

Code

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
ll n, k;
string s, t;
bool ans;
bool check(string st) {
rep(i, st.size())if (st[i] != st[st.size() - 1 - i])return 0;
return 1;
}
void solve() {
cin >> n >> k >> s;
k %= 2 * n;
if (!k)ans = check(s);
else if (k <= n) {
t = s.substr(0, k);
reverse(t.begin(), t.end());
ans = check(s + t) & check(t + s);
}
else {
t = "";
rep(i, k)t += '1';
rep(i, n)t[i] = s[n - 1 - i];
ans = 1;
rep(i, n) {
if (t[k - 1 - i] != '1' && t[k - 1 - i] != s[i])ans = 0;
t[k - 1 - i] = s[i];
}
if (ans)ans = check(s + t) & check(t + s);
}
if (ans)cout << "Yes\n";
else cout << "No\n";
}

B - Abs Abs Function

有一个非负整数对的集合 $T$,初始时 $T={A,B}$。每次操作,要么向 $T$ 中加入一个元素,要么给定区间 $[l,r]$,查询 $\min\limits_{x\in [l,r],(a,b)\in T} \lvert\lvert x-a \rvert -b \rvert$。
$q \le 2\cdot 10^5,A,B,l,r \le 10^9$

Tag: 数学

查询的东西函数图像画出来是一个 W。其实可以转化成 $\min{\lvert a+b-x\rvert,\lvert a-b-x\rvert}$。刚好它要求的也是 min,所以就拆成两个数 $a+b$ 和 $a-b$,查询改为 $\min\limits_{x\in [l,r],y\in T} \lvert x-y\rvert$。
这个东西用 set 维护一下就行了。

Code

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
ll q, t, a, b;
set<ll>s;
void solve() {
cin >> q >> a >> b;
s.insert(a + b), s.insert(a - b);
while (q--) {
cin >> t >> a >> b;
if (t == 1)s.insert(a + b), s.insert(a - b);
else {
auto p = s.lower_bound(a);
ll ans = MAXN;
if (p != s.end()) {
int x = *p;
if (x <= b)ans = 0;
else ans = x - b;
}
if (p != s.begin()) {
p--;
int x = *p;
ans = min(ans, a - x);
}
cout << ans << endl;
}
}
}
作者

Rushroom

发布于

2023-01-29

更新于

2023-03-24

许可协议

CC BY-NC-SA 4.0

评论