AcWing第 88 场周赛

AcWing 4800. 下一个

签到

#include <bits/stdc++.h>

using namespace std;

int32_t main() {
    int x;
    cin >> x;
    auto f = []( int x){
        set<int> a;
        for( int y ; x > 0; x /= 10 ) {
            y = x % 10;
            if( a.count(y) ) return false;
            a.insert(y);
        }
        return true;
    };
    for( int i = x + 1 ; i ; i ++ ){
        if( !f(i) ) continue;
        cout << i << "\n";
        return 0;
    }
    return 0;
}

AcWing 4801. 强连通图

这题实际上是一个诈骗题,因为任意一个点一定可以走到边界上,且边界可以走到任意一个点上。所以只要边界是一个环就是YES,否则就是NO

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n , m;
    string a , b;
    cin >> n >> m >> a >> b;
    if( a[0] == '<' && a[n-1] == '>' && b[0] == 'v' && b[m-1] == '^' ) 
        cout << "YES\n";
    else if ( a[0] == '>' && a[n-1] == '<' && b[0] == '^' && b[m-1] == 'v' )
        cout << "YES\n";
    else 
        cout << "NO\n";

    return 0;
}

AcWing 4802. 金明的假期

简单的dp,似乎比上一题还要简单

#include <bits/stdc++.h>

using namespace std;



int32_t main() {
    int n;
    cin >> n;
    vector<int> a(n+1);
    for( int i = 1 ; i <= n ; i ++ )
        cin >> a[i];
    vector<vector<int>> f(n+1 , vector<int>(3) );
    for( int i = 1 ; i <= n ; i ++ ){
        if( a[i] == 0 ) f[i][0] = f[i][1] = INT_MAX;
        else if( a[i] == 1 ) f[i][0] = INT_MAX , f[i][1] = min( f[i-1][0] , f[i-1][2] );
        else if( a[i] == 2 ) f[i][0] = min( f[i-1][1] , f[i-1][2] ) , f[i][1] = INT_MAX;
        else f[i][0] = min( f[i-1][1] , f[i-1][2] ) , f[i][1] = min( f[i-1][0] , f[i-1][2] );
        f[i][2] = min( { f[i-1][0] , f[i-1][1] , f[i-1][2] } ) + 1;
    }
    cout << min( { f[n][0] , f[n][1] , f[n][2] } );
    return 0;
}
posted @ 2023-02-06 16:39  PHarr  阅读(14)  评论(0编辑  收藏  举报