AtCoder Beginner Contest 256

A - 2^N

签到

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

int main()
{
    int n;
    cin >> n;
    cout << ( 1 << n ) << endl;
}

B - Batters

按照要求模拟一下

n = int(input())
a = list(map(int, input().split()))

now = [ 0 , 0 , 0, 0]
p = 0
for x in a:
    now[0] = 1
    nxt = [ 0 , 0 , 0 , 0 ]
    for i in range(4):
        if now[i] == 1 :
            if i + x >= 4:
                p += 1
            else :
                nxt[i+x] = now[i]
    now = nxt
print(p)

C - Filling 3x3 array

枚举每一行的两个位置,计算出第三个位置的值,当把三行后枚举完后判断每一列的值就好

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

int n , a[5][5] , h[5] , w[5] , cnt;

void dfs( int x )
{
    if( x == 4 )
    {
        for( int i = 1 ; i <= 3 ; i ++ )
        {
            int sum = 0;
            for( int j = 1 ; j <= 3 ; j ++ )
                sum += a[j][i];
            if(sum != w[i] ) return;
        }
        cnt ++;
        return ;
    }
    for( int i = 1 ; i < h[x]  ; i ++ )
        for( int j = 1 ; i + j < h[x] ; j ++ )
            a[x][1] = i , a[x][2] = j , a[x][3] = h[x] - i - j , dfs( x + 1 );
}

int main(){
    for( int i = 1 ; i <= 3 ; i ++ ) cin >> h[i];
    for( int i = 1 ; i <= 3 ; i ++ ) cin >> w[i];
    dfs( 1 );
    cout << cnt << endl;
}

D - Union of Interval

把所有的端点都放在一个数组中,然后排个序,同时标记一下端点的类型,然后从小到大开始一个括号匹配就好

#include<bits/stdc++.h>
#define PII pair<int,int>
using namespace std;

const int N = 2e5+5;
int n , cnt;
vector<PII> que;

int main(){
    cin >> n;
    for( int i = 1 , l , r  ; i <= n ; i ++ )
    {
        cin >> l >> r ;
        que.push_back({l,0});
        que.push_back({r,1});
    }
        sort( que.begin() , que.end() );
    for( auto [s , f ] : que ){
        if( f == 0)
        {
            if( cnt == 0 ) cout << s << " ";
            cnt ++;
        }
        else {
            cnt --;
            if( cnt == 0 ) cout << s << "\n";
        }
    }
}
posted @ 2022-06-25 13:17  PHarr  阅读(34)  评论(0编辑  收藏  举报