AtCoder Beginner Contest 230

A AtCoder Quiz 3

大于42加一即可

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

const int N = 2e5 + 5;
int n , fa[N];

int main()
{
    cin >> n;
    cout << "AGC";
    if( n >= 42 ) n ++;
    printf("%03d\n", n);
}

B Triple Metre

通过前两个字符判断出起点,然后循环判断是否符合条件

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

string s , f = "oxx";

int main()
{
    cin >> s;
    int i;
    if( s.size() == 1 && ( s[0] == 'o' || s[0] == 'x' ) )
    {
        cout << "Yes\n";
        return 0;
    }
    if( s[0] == 'o' && s[1] == 'x' ) i = 0;
    else if( s[0] == 'x' && s[1] == 'x' ) i = 1;
    else if( s[0] == 'x' && s[1] == 'o' ) i = 2;
    else
    {
        cout << "No\n";
        return 0;
    }
    for( auto it : s )
    {
        if( it == f[i] ) i ++ , i %= 3;
        else
        {
            cout << "No\n";
            return 0;
        }
    }
    cout << "Yes\n";
    return 0;
}

C X drawing

首先\((A,B)\)是一定被涂成黑色的,其他的点是\((A+k,B-k),(A+k,B+k)\)可知\(|\frac{(A+k)-A}{(B+k)-B}|=|\frac{(A+k)-A}{(B-k)-B}|=1\),所以这些点构成两条斜率为正负一的直线,结合样例易知直线和四个边界有四个交点,即图中所有与\((A,B)\)连线斜率为正负一的点都是黑色点

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

long long n , a , b , p , q , r , s;

int main()
{
    cin >> n >> a >> b >> p >> q >> r >> s;
    for( long long i = p ; i <= q ; i ++ )
    {
        for( long long j = r ; j <= s ; j ++ )
        {
            if( abs( i - a ) == abs( j - b ) ) printf("#");
            else printf(".");
        }
        printf("\n");
    }
}

D Destroyer Takahashi

题目给定了一些线段、一个攻击的宽度。对于每个线段只要有一个点被破坏,就认为该线段被破坏。对于每次攻击,穿透力是无限的,意思就是说,在只要有任意线段的任意一个点在本次攻击的范围中,线段就会被摧毁。

我们将所有的线段按照右端点从小到大排序,每次找到一个没有被摧毁的线段,那么该线段的右端点就是本次攻击的起点,因为知道攻击范围可以很简单求出本次攻击的终点,那么所有右端点在本次攻击终点之前的线段都可以被摧毁

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

const int N = 2e5 + 5;
int n , m , cnt ;
bool vis[N];
vector< pair< int , int > > line;

int read()
{
    int x = 0, ch = getchar();
    while( ch < '0' || ch > '9' ) ch = getchar();
    while( ch >= '0' && ch <= '9' ) x = ( x << 3 ) + ( x << 1 ) + ch - '0' , ch = getchar();
    return x;
}

int main()
{
    n = read() , m = read();
    line.push_back( { 0 , 0 } );
    for( int i = 1 , l , r ; i <= n ; i ++ )
    {
        l = read() , r = read() ;
        line.push_back( { r , l } );
    }
    n = line.size() - 1;
    sort( line.begin() + 1 , line.end() );
    for( int i = 1 , r ; i <= n ; i ++ )
    {
        if( vis[i] ) continue;
        cnt ++ , vis[i] = 1 , r = line[i].first + m - 1;
        for( int j = i + 1 ; line[j].second <= r && j <= n ; j ++ )
            vis[j]  = 1 ;
    }
    cout << cnt << endl;
}
posted @ 2021-12-06 16:45  PHarr  阅读(139)  评论(0编辑  收藏  举报