AtCoder Beginner Contest 072

A - Sandglass2

#include <bits/stdc++.h>

using namespace std;

#define int long long


int32_t main() {
    int a , b;
    cin >> a >> b;
    cout << max( a - b , 0ll );
    return 0;
}

B - OddString

#include <bits/stdc++.h>

using namespace std;

#define int long long


int32_t main() {
    string s;
    cin >> s;
    for( int i = 0 ; i < s.size() ; i += 2 )
        cout << s[i];
    return 0;
}

C - Together

这里注意到数字的个数只有\(10^5\),所以最多能够作为答案也不多,并且数字的范围也不大,直接枚举作为答案的值,然后统计一下就好。

#include <bits/stdc++.h>

using namespace std;

#define int long long

const int N = 1e5;

int32_t main() {
    ios::sync_with_stdio(false) , cin.tie(nullptr) , cout.tie(nullptr);
    int n;
    cin >> n;
    vector<int> cnt( N );
    for( int x ; n ; n -- )
        cin >> x , cnt[x] ++;
    int res = 1;
    for( int i = 1 ; i < N-1 ; i ++ )
        res = max( res , cnt[i-1] + cnt[i] + cnt[i+1] );
    cout << res;
    return 0;
}

D - Derangement

首先很容易证明的是,如果当前位置\(p_i=i\)无论向前向后交换都一定可以满足条件,这样我们只要一开始向着一个方向交换,就好了,最后就是特判一下最后一个位置。

#include <bits/stdc++.h>

using namespace std;

int32_t main() {
    ios::sync_with_stdio(false) , cin.tie(nullptr) , cout.tie(nullptr);
    int n , res = 0 ;
    cin >> n;
    vector<int> a( n+1 );
    for( int i = 1 ; i <= n ; i ++ )
        cin >> a[i];
    for( int i = 1 ; i < n ; i ++ )
        if( a[i] == i ) res ++ , swap( a[i] , a[i+1]);
    if( a[n] == n ) res ++;
    cout << res << "\n";
    return 0;
}
posted @ 2023-06-27 14:14  PHarr  阅读(4)  评论(0编辑  收藏  举报