AtCoder Beginner Contest 367

喜欢我 log21018=18 吗?

A#

#include<bits/stdc++.h>
#define eb emplace_back
#define ep emplace
using namespace std;

using ll = long long;

int a, b, c;

int main() {
	cin.tie(0)->sync_with_stdio(0);
	
	cin >> a >> b >> c;
	
	int ok = 0;
	
	if(b < c) {
		ok = a < b || a > c;
	}
	else {
		ok = a > c && a < b;
	}
	cout << (ok ? "Yes" : "No");
	return 0;
}

B#

#include<iostream>
int main() {
	double x;
	std::cin >> x;
	std::cout << x;
	return 0;
}

C#

#include<bits/stdc++.h>
#define eb emplace_back
#define ep emplace
using namespace std;

using ll = long long;

int n, k, R[10], b[10];

void dfs(int i) {
	if(i == n) {
		if(accumulate(b, b + n, 0) % k == 0) {
			for(int i = 0; i < n; ++ i) {
				cout << b[i] << " \n"[i == n - 1];
			}
		}
		return;
	}
	for(int x = 1; x <= R[i]; ++ x) {
		b[i] = x;
		dfs(i + 1);
	}
}
int main() {
	cin.tie(0)->sync_with_stdio(0);
	cin >> n >> k;
	for(int i = 0; i < n; ++ i) cin >> R[i];
	dfs(0);
	return 0;
}

D#

第一遍处理不经过 (1,n) 的贡献。

第二遍处理经过 (1,n) 的贡献。

#include<bits/stdc++.h>
#define eb emplace_back
#define ep emplace
using namespace std;

using ll = long long;
constexpr int N = 2e5 + 5;

int n, m, a[N];

int main() {
	cin.tie(0)->sync_with_stdio(0);
	cin >> n >> m;
	for(int i = 1; i <= n; ++ i) {
		cin >> a[i];
	}
	ll ans = 0; int s = 0;
	map<int, int> mp;
	
	++ mp[0];
	for(int i = 1; i < n; ++ i) {
		s = (s + a[i]) % m;
		ans += mp[s] ++;
	}
	-- mp[0];
	ans += mp[s = (s + a[n]) % m];
	for(int i = 1, t = 0; i < n; ++ i) {
		t = (t + a[i]) % m;
		s = (s + a[i]) % m;
		-- mp[t], ans += mp[s];
	}
	cout << ans;
	return 0;
}

E#

倍增 pos(i,k) 表示经过 2k 轮变换后 i 的位置。

#include<bits/stdc++.h>
#define eb emplace_back
#define ep emplace
using namespace std;

using ll = long long;
constexpr int N = 2e5 + 5;

int n, a[N], pos[N][64]; ll k;


int main() {
	cin.tie(0)->sync_with_stdio(0);
	cin >> n >> k;
	for(int i = 1; i <= n; ++ i) cin >> pos[i][0];
	for(int i = 1; i <= n; ++ i) cin >> a[i];
	
	
	for(int j = 1; j <= 63; ++ j) {
		for(int i = 1; i <= n; ++ i) {
			pos[i][j] = pos[pos[i][j - 1]][j - 1];
		}
	}
	for(int i = 1; i <= n; ++ i) {
		int p = i;
		for(int j = 0; j <= 63; ++ j) {
			if(k >> j & 1) p = pos[p][j];
		}
		cout << a[p] << ' ';
	}
	return 0;
}

F#

值域很小。

设计一种能过判断集合相等的哈希:给每个数随机赋值 ull 范围整数,区间和代表哈希值。

#include<bits/stdc++.h>
#define eb emplace_back
#define ep emplace
using namespace std;

using ll = unsigned long long;
constexpr int N = 2e5 + 5;

int n, m; ll s[N], t[N];
map<int, ll> mp;

mt19937_64 rnd(time(0));

ll A(int l, int r) {return s[r] - s[l - 1];}
ll B(int l, int r) {return t[r] - t[l - 1];}

int main() {
	cin.tie(0)->sync_with_stdio(0);
	cin >> n >> m;
	for(int i = 1; i <= n; ++ i) {
		int x; cin >> x;
		if(!mp.count(x)) mp[x] = rnd();
		s[i] = s[i - 1] + mp[x];
	}
	for(int i = 1; i <= n; ++ i) {
		int x; cin >> x;
		if(!mp.count(x)) mp[x] = rnd();
		t[i] = t[i - 1] + mp[x];
	}
	while(m --) {
		int l, r, L, R; cin >> l >> r >> L >> R;
		cout << (A(l, r) == B(L, R) ? "Yes\n" : "No\n");
	}
	return 0;
}
posted @   Lu_xZ  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示