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";
}
}
}