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;
}
posted @   sweet_guagua  阅读(69)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示