2025-12-19 Codeforces Global Round 31 (Div. 1 + Div. 2)+2025-12-20 UNIQUE VISION Programming Contest 2025 Christmas (AtCoder Beginner Contest 437) hetao1733837的record
2025-12-19 Codeforces Global Round 31 (Div. 1 + Div. 2)
比赛链接:Codeforces Global Round 31 (Div. 1 + Div. 2)
好困......有个问题就是,下周二要不要回家打 D i v 3 Div3 Div3?我坐最后一排睡觉会被发现吗?
CF2180C
原题链接:C. XOR-factorization
分析
场切了 A , B A,B A,B,呃......似乎 A A A 更难一些?
这题有一个初步思路就是呃,贪心,这不废话吗,呃,就是高位尽可能多一些,呃,没了。
但是,在来学校的地铁🚇上,我发现似乎可以在某一个无限大的位置排偶数次,然后在排一个 n n n,那这题岂不是不可做?
行,上午 【数据删除】 安排了一场模拟赛,感觉题目质量并不高......可能和时代有点脱节吧,还在高精度。
我继续补题,不管他了。
漏了一个限制 a i ≤ n a_i\le n ai≤n。
那么,对于 k ≡ 1 ( m o d 2 ) k \equiv 1\pmod 2 k≡1(mod2) ,都整成 n n n 即可。
然后,呃,我就看不懂了......先写一下代码看能不能懂。
正解
cpp
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int T, n, k;
int a[N];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> T;
while (T--){
memset(a, 0, sizeof(a));
cin >> n >> k;
int p = 0;
if (k % 2 == 1){
for (int i = 1; i <= k; i++)
cout << n << " ";
cout << '\n';
continue;
}
else{
for (int i = 30; i >= 0; i--){
if (n & (1 << i)){
for (int j = 0; j < k; j++)
if (j != min(p, k - 1))
a[j] += (1 << i);
if (p < k)
p++;
}
else{
for (int j = 0; j < p / 2 * 2; j++)
a[j] += (1 << i);
}
}
}
for (int i = 0; i < k; i++)
cout << a[i] << " ";
cout << '\n';
}
}
我好像理解又好像不理解。
问花花了(●'◡'●)
直接干到傍晚了......并非由于花花,而是我直接在宿舍爽睡到三点半🕞,又听了核桃的课导致的。
呃,我的理解还是太感性了。
回家的地铁上,似乎想明白了,就是 p p p 既用于限制小于等于 n n n,同时,还有控制二进制下 1 1 1 的位置都是奇数次。呃,大概就是这吧。
CF2180D Insolvable Disks
原题链接:D. Insolvable Disks
分析
艹,CF 似了。天注定今晚写不了了。
xxxalq 说 D 是坨好屎,呃......那补一下吧......
感觉找 AI 翻译了不下 3 3 3 次这道题......
呃, J J J 组 T 4 T4 T4 的水平吧......可能都到不了。
好累😩
音乐🎵是缓解疲惫的良药。
------fbh
巧妙的关系推到!当两圆相切,当且仅当他们半径等于距离,则有了一个递推式,然后吃吃吃。呃......我不想写了。翻译留在这了。
正解
cpp
#include <bits/stdc++.h>
using namespace std;
const int N = 2000005;
int T;
int n, x[N];
int main(){
ios::sync_with_stdio(false) , cin.tie(0);
cin >> T;
while(T--){
cin >> n;
for (int i = 0; i < n; i++)
cin >> x[i];
int ans = n - 1;
int l = 0 , r = +1e9+1;
int cur = 0;
int fst = 1;
for (int i = 1; i < n; i++){
cur = (x[i] - x[i - 1]) - cur;
if (i % 2 == fst % 2){
r = min(r, cur);
if (i < n - 1)
l = max(l, cur - (x[i + 1] - x[i]));
}
else{
l = max(l, -cur);
if (i < n - 1)
r = min(r, (x[i + 1] - x[i]) - cur);
}
if (l >= r){
ans--;
l = 0;
r = 1e9 + 1;
cur = 0;
fst = i + 1;
}
}
cout << ans << '\n';
}
}
2025-12-20 UNIQUE VISION Programming Contest 2025 Christmas (AtCoder Beginner Contest 437)
比赛链接:AtCoder Beginner Contest 437
C - Reindeer and Sleigh 2
原题链接1:AT_abc_437_c
原题链接2:C - Reindeer and Sleigh 2
分析
太耻辱了,橙题没场切/ll
一直在纠结按重量还是力量贪心,不是,那直接按和贪心呗,唐诗......
正解
cpp
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 300005;
int T;
int n;
struct node{
int w, p, sum;
}a[N];
bool cmp(node x, node y){
return x.sum > y.sum;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> T;
while (T--){
cin >> n;
int tot = 0;
for (int i = 1; i <= n; i++){
cin >> a[i].w >> a[i].p;
a[i].sum = a[i].w + a[i].p;
tot += a[i].w;
}
sort(a + 1, a + n + 1, cmp);
int ans = n;
for (int i = 1; i <= n; i++){
tot -= a[i].sum;
ans--;
if (tot <= 0){
cout << ans << '\n';
break;
}
}
}
}
D - Sum of Differences
原题链接1:AT_abc437_d
原题链接2:D - Sum of Differences
分析
前缀和,场上这么烫吗?
正解
cpp
#include <bits/stdc++.h>
#define int long long
#define mod 998244353
using namespace std;
const int N = 300005;
int n, m, a[N], b[N], sum[N];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++){
cin >> a[i];
}
for (int i = 1; i <= m; i++){
cin >> b[i];
}
sort(b + 1, b + m + 1);
for (int i = 1; i <= m; i++){
sum[i] = sum[i - 1] + b[i];
}
int ans = 0;
for (int i = 1; i <= n; i++){
int tmp = upper_bound(b + 1, b + m + 1, a[i]) - b - 1;
int cnt1 = tmp, cnt2 = m - tmp, sum1 = sum[tmp], sum2 = sum[m] - sum[tmp];
int res = (a[i] * cnt1 - sum1 + sum2 - a[i] * cnt2) % mod;
ans = (ans + res) % mod;
}
cout << ans;
}