AtCoder Beginner Contest 266 A-G
Posted 行码棋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AtCoder Beginner Contest 266 A-G相关的知识,希望对你有一定的参考价值。
更好观感
AtCoder Beginner Contest 266 A-G
A
直接输出字符串中间字符即可。
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using db = double;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using arr = array<int, 3>;
using vi = vector<int>;
using vl = vector<ll>;
template <class T> void Min(T &a, const T b) if (a > b) a = b;
template <class T> void Max(T &a, const T b) if (a < b) a = b;
const int dx[] = -1, 0, 1, 0, dy[] = 0, 1, 0, -1;
const int N = 1e5 + 5, M = N;
const int mod = 1e9 + 7;
const ld eps = 1e-8;
void solve()
string s;
cin >> s;
cout << s[s.size() / 2];
int main()
ios::sync_with_stdio(false);
cin.tie(0);
int t;
t = 1;
// cin >> t;
while(t--)
solve();
return 0;
B
令
m
=
998244353
m = 998244353
m=998244353 。
N
−
x
=
k
×
m
,
k
∈
Z
N - x = k \\times m, k \\in Z
N−x=k×m,k∈Z
x = N − k × m , 0 ≤ x ≤ m − 1 x = N - k \\times m, 0 \\leq x \\leq m - 1 x=N−k×m,0≤x≤m−1
x = ( N m o d m + m ) m o d m x = (N \\bmod m + m) \\bmod m x=(Nmodm+m)modm
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using db = double;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using arr = array<int, 3>;
using vi = vector<int>;
using vl = vector<ll>;
template <class T> void Min(T &a, const T b) if (a > b) a = b;
template <class T> void Max(T &a, const T b) if (a < b) a = b;
const int dx[] = -1, 0, 1, 0, dy[] = 0, 1, 0, -1;
const int N = 1e5 + 5, M = N;
const int mod = 998244353;
const ld eps = 1e-8;
// x = n - k mod
void solve()
ll n;
cin >> n;
cout << (n % mod + mod) % mod << "\\n";
int main()
ios::sync_with_stdio(false);
cin.tie(0);
int t;
t = 1;
// cin >> t;
while(t--)
solve();
return 0;
C
直接暴力判断叉积是否小于等于0即可。
叉积计算的是三角形面积,当在右手系的情况下, 叉积计算出来的值就是三角形的正面积,如果计算出的值为负值,即三角形不存在。
A , B , C A,B,C A,B,C 三个点, A B → × A C → 2 \\frac \\overrightarrow AB \\times \\overrightarrow AC2 2AB×AC 即为对应的三角形面积, 只需判断上面分母的叉积是否小于等于 0 即可。两个向量分别为 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x1, y1),(x2, y2) (x1,y1),(x2,y2) ,则 S △ A B C = x 1 ⋅ y 2 − x 2 ⋅ y 1 S_\\triangle ABC = x1 \\cdot y2 - x2 \\cdot y1 S△ABC=x1⋅y2−x2⋅y1
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using db = double;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using arr = array<int, 3>;
using vi = vector<int>;
using vl = vector<ll>;
template <class T> void Min(T &a, const T b) if (a > b) a = b;
template <class T> void Max(T &a, const T b) if (a < b) a = b;
const int dx[] = -1, 0, 1, 0, dy[] = 0, 1, 0, -1;
const int N = 1e5 + 5, M = N;
const int mod = 1e9 + 7;
const ld eps = 1e-8;
void solve()
vector<pii> p(10);
for(int i = 0; i < 4; i++)
cin >> p[i].first >> p[i].second;
for(int i = 0; i < 4; i++)
pii a = p[(i + 1) % 4].first - p[i].first, p[(i + 1) % 4].second - p[i].second;
pii b = p[(i - 1 + 4) % 4].first - p[i].first, p[(i - 1 + 4) % 4].second - p[i].second;
if(a.first * b.second - b.first * a.second <= 0)
cout << "No\\n";
return;
cout << "Yes\\n";
int main()
ios::sync_with_stdio(false);
cin.tie(0);
int t;
t = 1;
// cin >> t;
while(t--)
solve();
return 0;
D
f [ i ] f[i] f[i] 代表前 i i i 个蛇, 抓了第 i i i 个,得到的最大价值。
可以发现,当抓了第 i i i 个蛇后, 那么位置必须处于 p [ i ] p[i] p[i] 处,那么首先可以暴力的想怎么转移, 就是我们可以两层循环, 对于每一个 f [ i ] f[i] f[i] ,我们找前面的可以进行转移(即在时间限制内可以到达 f [ j ] f[j] f[j] )的位置 j , j < i j,j \\lt i j,j<i ,每一个位置进行判断。 复杂度 O ( n 2 ) O(n^2) O(n2)
但是本题有一个特点,位置数极少,只有5个,那么 i i i 位置往前5个之后一定是可以转移的位置(在时间限制内一定可以到达 i i i)。 所以我们暴力判断 i i i 位置的前几个,然后对此进行转移即可。
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using db = double;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using arr = array<int, 3>;
using vi = vector<int>;
using vl = vector<ll>;
template <class T> void Min(T &a, const T b) if (a > b) a = b;
template <class T> void Max(T &a, const T b) if (a < b) a = b;
const int dx[] = -1, 0, 1, 0, dy[] = 0, 1, 0, -1;
const int N = 1e5 + 5, M = N;
const int mod = 1e9 + 7;
const ld eps = 1e-8;
void solve()
int n;
cin >> n;
vi t(n + 1), p(n + 1), w(n + 1);
for(int i = 1; i <= n; i++)
cin >> t[i] >> p[i] >> w[i];
vl f(n + 1, -2e18);
f[0] = 0;
for(int i = 1; i <= n; i++)
for(int j = max(0, i - 10); j < i; j++)
if(t[i] - t[j] >= abs(p[i] - p[j]))
Max(f[i]AtCoder Beginner Contest 234
AtCoder Beginner Contest 115 题解