ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AtCoder Beginner Contest 249题解

2022-04-23 23:01:51  阅读:315  来源: 互联网

标签:AtCoder cnt res cur int 题解 dfs auto 249


AtCoder Beginner Contest 249 A\(\sim\) D题解

A - Jogging

题目描述:A , B两人在散步,给你他们的速度和散步多少时间后需要休息多久,问到达指定时间后,谁走在前面。

思路:根据题意模拟即可

时间复杂度:\(O(1)\)

参考代码:

void solve() {
	auto cal = [](int a, int b, int c, int x)->int {
		int res = a * b * (x / (a + c));
		x %= (a + c);
		res += b * min(a, x);
		return res;
	};
	int a, b, c, d, e, f, x;
	string res = "Takahashi";
	cin >> a >> b >> c >> d >> e >> f >> x;
	int A = cal(a, b, c, x), B = cal(d, e, f, x);
	if (A < B) res = "Aoki";
	else if (A == B) res = "Draw";
	cout << res << '\n';
	return;
}

B - Perfect String

题目描述:给你一个字符串,若该字符串的所有字符都不相同,且不仅含有大写字母,还含有小写字母,则该字符串是wonderful

思路:根据题意模拟即可。

时间复杂度:\(O(n^2)\),\(n\)为字符串长度。

参考代码:

void solve() {
	string s;
	cin >> s;
	int n = s.size();
	auto check = [&](char ch)->bool {
		for (auto&& c : s) if (c >= ch && c <= ch + 25) return true;
		return false;
	};
	string res = "Yes";
	for (int i = 0; i < n; ++i) {
		for (int j = i + 1; j < n; ++j) {
			if (s[i] != s[j]) continue;
			res = "No";
		}
	}
	if (!check('a') || !check('A')) res = "No";
	cout << res << '\n';
	return;
}

C - Just K

题目描述:给你\(N\)个字符串和一个数字\(K\),求从这\(N\)个字符串中选出一些字符串所组成的所有子集中,满足集合中字符出现次数为\(K\)的数量的最大值。

思路:考虑到\(N\)很小,暴力枚举即可

时间复杂度:\(O(26 \times 2^N)\)

参考代码:

void solve() {
	int n, k;
	cin >> n >> k;
	vector<string>strs(n);
	for (int i = 0; i < n; ++i) cin >> strs[i];
	vector<int>cnt(26, 0);
	int res = 0;
	auto dfs = [&](auto&& dfs, int cur)->void {
		if (cur == n) {
			int ct = 0;
			for (auto&& c : cnt) ct += c == k;
			res = max(res, ct);
			return;
		}
		dfs(dfs, cur + 1);
		for (auto&& c : strs[cur]) cnt[c - 'a']++;
		dfs(dfs, cur + 1);
		for (auto&& c : strs[cur]) cnt[c - 'a']--;
		return;
	};
	dfs(dfs, 0);
	cout << res << '\n';
	return;
}

D - Index Trio

题目描述:给你一个长度为\(n\)的序列\(A\),求满足等式\(\frac{A_i}{A_j} = A_k\)的三元组\((i ,j , k)\)的数量。

思路:考虑到数据范围很小,直接暴力枚举\(A_k\)即可。

时间复杂度:\(O(mlogm)\) ,其中\(m = \mathop{max}\limits_{i = 1}^{n}\{a_i\}\)。

参考代码:

void solve() {
	int n, a;
	const int N = 2e5 + 5;
	vector<int>cnt(N + 1, 0);
	cin >> n;
	for (int i = 1; i <= n; ++i) cin >> a, cnt[a]++;
	long long res = 0;
	for (int i = 1; i < N; ++i) {
		if (cnt[i] == 0) continue;
		for (int j = i; j < N; j += i) {
			int dy = j / i;
			res += 1ll * cnt[i] * cnt[j] * cnt[dy];
		}
	}
	cout << res << '\n';
	return;
}

标签:AtCoder,cnt,res,cur,int,题解,dfs,auto,249
来源: https://www.cnblogs.com/cherish-/p/16183943.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有