cf掉分日记 - Codeforces Round #768 (Div. 2) A - C
本场比赛,感觉状态不佳,本应该打得更好一点。最近几场都没能摸到 D
1561 - > 1502
A - Min Max Swap
就像标题说的那样,让一侧全取min 另一侧全取max,即可
int a[N], b[N];
int main (){
IOS
int t; cin >> t;
while (t --){
int n; cin >> n;
for (int i = 1 ; i <= n ; i ++){
cin >> a[i];
}
for (int i = 1 ; i <= n ; i ++){
cin >> b[i];
if (a[i] > b[i]) swap(a[i], b[i]);
}
int ans1 = 0, ans2 = 0;
for (int i = 1 ; i <= n ; i ++){
ans1 = max (a[i], ans1);
ans2 = max (b[i], ans2);
}
cout << ans1 * ans2 << endl;
}
return 0;
B - Fun with Even Subarrays
这题比赛的时候捣鼓了好久了,最后是 wa2 (23min)收尾。
首先是发现了最后一个点是没办法被改变的,因此在这上面做文章。
wa1:想到了倍增,于是从最后一个点开始向前翻,1,2,4,8,直至改变整个区间
wa2:发现如果最后的点,如果有一段相同的,可以直接用,一段翻,不需要只用最后一个点。
最后才意识到,其实每次使用的都是,后缀最长相同的一段,去覆盖它前面的一段,重复操作至都完全相同即可。为时已晚。
是一道简单的模拟题,但却浪费很多时间。近期来第一次打大号,确实有点紧张。
int a[N];
int main (){
IOS
int t; cin >> t;
while (t --){
int n; cin >> n;
for (int i = 1 ; i <= n ; i ++){
cin >> a[i];
}
int cnt = 0, ans = 0;
for (int i = 1 ; i <= n ; i ++){
if (a[i] == a[n]) cnt ++;
}
if (cnt == n){
cout << 0 << endl;
continue;
}
int cnt2 = 0;
for (int i = n, j = 0 ; i >= 1 ;){
while (a[i] == a[n] && i >= 1){
i --;
j ++;
}
int t = j;
while (t && i >= 1){
j ++;
if (a[i] != a[n]) cnt ++;
if (cnt == n) break;
i --;
t --;
}
ans ++;
if (cnt == n) break;
}
cout << ans << endl;
}
return 0;
}
C - And Matching
这次比赛死就死在这个 C 上面了。做题的时候没有思路,到处瞎想。最后发现自己最开始的想法才是正确的。我感觉,在我开始打表找规律的时候就已经死了。
把 0 构造出来就成功了。以 8 举例,0 - 7 ,1 - 6,2 - 5 , 3 - 4 。然后后续所有情况都是可以通过变动把 0 - 7 拆掉构造出来的。 0 与 任何数 & 的结果都是 0 ; 7 与 0 - 6 的任何数 & 都是 0 - 6 本身。然后注意特判一下 n - 1 的情况。
一开始我在尝试构造 8 ,推出来之后比较激动。很不幸的是,我写得太急了,提交的代码忘记把 5 改成 n - 3 了。到赛后最后一分钟才发现。 寄 ! rate - 59
#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define Equ(a,b) (fabs((a)-(b))<eps)
#define More(a,b) (((a)-(b))>(eps))
#define x first
#define y second
using namespace std;
const int N=3e6+7;
const double eps=1e-6;
const int mod=1e9+7;
int a[N];
bool st[N];
int main (){
IOS
int t; cin >> t;
while (t --){
int n, m; cin >> n >> m;
for (int i = 0 ; i <= n ; i ++) st[i] = 0, a[i] = 0;
for (int i = 0, j = n - 1 ; i < j ; i ++, j --){
a[i] = j;
a[j] = i;
}
if (m == n - 1 && n == 4){
cout << -1 << endl;
continue;
}
if (m == n - 1){
a[n - 3] = 1; a[1] = n - 3;
a[2] = 0; a[0] = 2;
a[n - 1] = n - 2; a[n - 2] = n - 1;
}
else{
int temp = a[m];
a[temp] = 0; a[0] = temp;
a[m] = n - 1; a[n - 1] = m;
}
// int ans= 0, cnt = 0;
for (int i = 0 ; i < n ; i ++){
if(!st[i]){
cout << i << ' '<< a[i] << endl;
// cnt ++;
// ans += (i & a[i]);
st[i] = st[a[i]] = 1;
}
}
// cout << ans << ' ' << cnt << endl;
}
return 0;
}
分类:
Codeforces
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】