AtCoder Beginner Contest 393



A - Poisonous Oyster#

题意#

两个人A,B4种东西,A1,2B1,3,给出两人状态finesick,问哪种食物有毒

思路#

模拟

代码#

点击查看代码
#include<bits/stdc++.h>
#include<unordered_set>
#include<unordered_map>
using namespace std;
#define int long long
typedef pair<int, int> pii;

const int mxn = 1e5 + 5;

void solve()
{
	string s, t;
	cin >> s >> t;
	if (s == "fine" && t == "fine")
	{
		cout << 4 << endl;
		return;
	}
	if (s == "fine" && t == "sick")
	{
		cout << 3 << endl;
		return;
	}
	if (s == "sick" && t == "fine")
	{
		cout << 2 << endl;
		return;
	}
	cout << 1 << endl;
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int __ = 1;
	//cin >> __;
	while (__--)
	{
		solve();
	}

	return 0;
}

B - A..B..C#

题意#

给定字符串s,求:

思路#

按题意模拟

代码#

点击查看代码
#include<bits/stdc++.h>
#include<unordered_set>
#include<unordered_map>
using namespace std;
#define int long long
typedef pair<int, int> pii;

const int mxn = 1e5 + 5;

void solve()
{
	string s;
	cin >> s;
	int ans = 0;
	for (int i = 0; i < s.length() - 2; i++)
	{
		if (s[i] != 'A')
		{
			continue;
		}
		for (int j = i + 1; j < s.length() - 1; j++)
		{
			if (s[j] != 'B')
			{
				continue;
			}
			for (int k = j + 1; k < s.length(); k++)
			{
				if (s[k] != 'C')
				{
					continue;
				}
				if (j - i == k - j)
				{
					ans++;
				}
			}
		}
	}
	cout << ans << endl;

}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int __ = 1;
	//cin >> __;
	while (__--)
	{
		solve();
	}

	return 0;
}

C - Make it Simple#

题意#

给定n个顶点m条边的无向图,求把它变成简单图要删的边数

思路#

删自环和重边

代码#

点击查看代码
#include<bits/stdc++.h>
#include<unordered_set>
#include<unordered_map>
using namespace std;
#define int long long
typedef pair<int, int> pii;

const int mxn = 1e5 + 5;

void solve()
{
	int n, m, ans = 0;
	cin >> n >> m;
	set<pii> s;
	for (int i = 0; i < m; i++)
	{
		int u, v;
		cin >> u >> v;
		if (u < v)
		{
			swap(u, v);
		}
		if (u == v)
		{
			ans++;
		}
		else if (s.count({ u,v }))
		{
			ans++;
		}
		else
		{
			s.insert({ u,v });
		}
	}
	cout << ans << endl;
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int __ = 1;
	//cin >> __;
	while (__--)
	{
		solve();
	}

	return 0;
}

D - Swap to Gather#

题意#

给定01s,每次操作可以交换sisi+1。求使所有1都连续的最小操作数

思路#

往最中间的1移——中位数在最小化绝对差之和中的最优性质

代码#

点击查看代码
#include<bits/stdc++.h>
#include<unordered_set>
#include<unordered_map>
using namespace std;
#define int long long
typedef pair<int, int> pii;

const int mxn = 1e5 + 5;

void solve()
{
	int n, ans = 0;
	string s;
	cin >> n >> s;
	vector<int> p;
	for (int i = 0; i < s.length(); i++)
	{
		if (s[i] == '1')
		{
			p.push_back(i);
		}
	}
	int m = p.size(), mid = p[m / 2];
	for (int i = 0; i < m; i++)
	{
		ans += abs(p[i] - (mid - m / 2 + i)); // 后者为目标点
	}
	cout << ans << endl;

}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int __ = 1;
	//cin >> __;
	while (__--)
	{
		solve();
	}

	return 0;
}

E - GCD of Subset#

题意#

给定长为n的序列a,和正整数k。对于每个i(1in):从a中选择包括aik个元素,求所选元素的GCD的最大值

思路#

每个元素都算一遍因子会超时,那就处理数据范围内所有数作因子的次数。详情见代码

代码#

点击查看代码
#include<bits/stdc++.h>
#include<unordered_set>
#include<unordered_map>
using namespace std;
#define int long long
typedef pair<int, int> pii;

const int mxn = 1e6 + 5;

void solve()
{
	int n, k;
	cin >> n >> k;
	vector<int> a(n), fre(mxn, 0);
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
		fre[a[i]]++;
	}
	vector<int> cnt(mxn, 0); // cnt[i]表示i作因子的次数
	for (int i = 1; i < mxn; i++)
	{
		for (int j = i; j < mxn; j += i) // 枚举倍数
		{
			cnt[i] += fre[j];
		}
	}
	vector<int> ans(mxn, 0);
	for (int i = mxn; i >= 1; i--) // 要最大就逆序枚举
	{
		if (cnt[i] >= k)
		{
			for (int j = i; j < mxn; j += i)
			{
				if (!ans[j])
				{
					ans[j] = i;
				}
			}
		}
	}
	for (int i = 0; i < n; i++)
	{
		cout << ans[a[i]] << endl;
	}
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int __ = 1;
	//cin >> __;
	while (__--)
	{
		solve();
	}

	return 0;
}

F - Prefix LIS Query#

题意#

给定长为n的序列a,和q次查询,每次查询给定ri,xi
考虑(a1,a2,···,ari)的一个严格递增子序列(不一定连续),其每个元素都不大于xi。求这个子序列的最大长度

思路#

详情见代码

代码#

点击查看代码
#include<bits/stdc++.h>
#include<unordered_set>
#include<unordered_map>
using namespace std;
#define int long long
typedef pair<int, int> pii;

const int mxn = 1e6 + 5;

void solve()
{
	int n, q;
	cin >> n >> q;
	vector<int> a(n);
	for (auto& i : a) cin >> i;
	vector<vector<pii>> Q(n);
	for (int i = 0; i < q; i++)
	{
		int r, x;
		cin >> r >> x;
		Q[--r].push_back(make_pair(i, x));
	}
	vector<int> lis(n, 1e18), ans(q);
	for (int i = 0; i < n; i++)
	{
		// 将a[i]插入当前的lis
		auto p = lower_bound(lis.begin(), lis.end(), a[i]);
		*p = a[i];
		// 在长度为i的子序列中查询
		for (auto& [idx, x] : Q[i])
		{
			ans[idx] = upper_bound(lis.begin(), lis.end(), x) - lis.begin();
		}
	}
	for (int i = 0; i < q; i++)
	{
		cout << ans[i] << endl;
	}
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int __ = 1;
	//cin >> __;
	while (__--)
	{
		solve();
	}

	return 0;
}


比赛链接 https://atcoder.jp/contests/abc393

posted @   _SeiI  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示