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 Nx=k×m,kZ

x = N − k × m , 0 ≤ x ≤ m − 1 x = N - k \\times m, 0 \\leq x \\leq m - 1 x=Nk×m,0xm1

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 SABC=x1y2x2y1

#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 题解

AtCoder Beginner Contest 154 题解

AtCoder Beginner Contest 103

AtCoder Beginner Contest 228

AtCoder Beginner Contest 242