AtCoder Beginner Contest 266

A - Middle Letter

#include<bits/stdc++.h>

using namespace std;

int32_t main() {
    string s;
    cin >> s;
    cout << s[ (s.size()+1) / 2 - 1  ];
    return 0;
}

B - Modulo Number

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

const int mod = 998244353;
int n;

int32_t main() {
    cin >> n;
    n = ( n % mod + mod ) % mod;
    cout << n << "\n";
}

C - Convex Quadrilateral

给一个四边形,判断是不是一个凸多边形。对于一个凸四边形,任意一个点都不在其他三个点构成的一个三角形中。

然后就是判断在是否在三角形内。

#include <iostream>
#include <math.h>
using namespace std;
struct Point {
    double x;
    double y;
};
double product(Point p1,Point p2,Point p3) {
    //首先根据坐标计算p1p2和p1p3的向量,然后再计算叉乘
    //p1p2 向量表示为 (p2.x-p1.x,p2.y-p1.y)
    //p1p3 向量表示为 (p3.x-p1.x,p3.y-p1.y)
    return (p2.x-p1.x)*(p3.y-p1.y) - (p2.y-p1.y)*(p3.x-p1.x);
}
bool isInTriangle(Point p1,Point p2,Point p3,Point o) {
    //保证p1,p2,p3是逆时针顺序
    if(product(p1, p2, p3)<0) return isInTriangle(p1,p3,p2,o);
    if(product(p1, p2, o)>0 && product(p2, p3, o)>0 && product(p3, p1, o)>0)
        return true;
    return false;
}
int main() {
    Point a , b , c , d;
    cin >> a.x >>  a.y;
    cin >> b.x >>  b.y;
    cin >> c.x >>  c.y;
    cin >> d.x >>  d.y;
    bool flag;
    flag = isInTriangle(a , b , c , d );
    if(flag) puts("No") , exit(0);
    flag = isInTriangle( b , c , d , a );
    if(flag) puts("No") , exit(0);
    flag = isInTriangle( c , d , a , b );
    if(flag) puts("No") , exit(0);
    flag = isInTriangle(d , a , b , c );
    if(flag) puts("No") , exit(0);
    cout << "Yes\n";
}

D - Snuke Panic (1D)

有五个洞,每单位时间只能移动一步,给出若干时间,每个时间在某个洞的得分,问最多能得多少分。

f[i][j]表示在时间ij能得到的最大分数,则f[i][j] = max( f[i-1][j] , f[i-1][j-1] , f[i-1][j+1]) ,如果时间i有得分点的话,在加上得分点就好。

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

const int N = 15e+5;
int f[N][5] , t[N] , w[N] , v[N] , n ;

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

int32_t main() {
    n = read();
    for( int i = 1 ; i <= n ; i ++ ) t[i] = read() , w[i] = read() , v[i] = read();
    f[0][1] = f[0][2] = f[0][3] = f[0][4] = LONG_MIN;
    for( int i = 1 , j = 1 , wj , vj  ; i <= t[n] ; i ++ ){
        f[i][0] = max( f[i-1][0] , f[i-1][1] );
        f[i][4] = max( f[i-1][4] , f[i-1][3] );
        for( int k = 1 ; k <= 3 ; k ++ )
            f[i][k] = max( f[i-1][k] , max( f[i-1][k-1] , f[i-1][k+1] ) );
        if( t[j] == i ) f[i][w[j]] += v[j] , j ++;
    }
    int res = LONG_MIN;
    for( int i = 0 ; i <= 4 ; i ++ )
        res = max( res , f[t[n]][i] );
    cout << res << "\n";
    return 0;
}


posted @ 2022-09-13 15:04  PHarr  阅读(45)  评论(0编辑  收藏  举报