ICode9

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

CF Edu Round 131 简要题解(ABCD)

2022-07-10 17:04:55  阅读:135  来源: 互联网

标签:ABCD typedef int 题解 scanf CF long && ll


A

分类讨论即可 .

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
int main()
{
	int T, a11, a12, a21, a22; scanf("%d", &T);
	while (T--)
	{
		scanf("%d%d%d%d", &a11, &a12, &a21, &a22);
		if (!a11 && !a12 && !a21 && !a22) puts("0");
		else if (a11 && a12 && a21 && a22) puts("2");
		else puts("1");
	} return 0;
}

t 宝那个判 \(a\) 里所有数之和的是真妙 .

B

显然 \(d=2\) 最优,然后模拟即可 .

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 5e5 + 233;
vector<int> g[N];
inline void addedge(int u, int v){g[u].emplace_back(v);}
int n;
bool vis[N];
int main()
{
	int T; scanf("%d", &T);
	while (T--)
	{
		scanf("%d", &n);
		puts("2");
		for (int i=1; i<=n; i++)
		{
			if (vis[i]) continue;
			vis[i] = true;
			for (int j=i; j<=n; j*=2) vis[j] = true, printf("%d ", j);
		}
		puts("");
		for (int i=1; i<=n; i++) vis[i] = false;
	} return 0;
}

C

二分答案,于是考虑把时间都用满可以做多少工作 check 即可 .

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 5e5 + 233;
int n, m, a[N];
inline bool check(int x)
{
	ll ans = 0;
	for (int i=1; i<=n; i++) ans += min(x, a[i]) + (x - min(x, a[i])) / 2;
	return ans >= m;
}
inline void solve()
{
	scanf("%d%d", &n, &m);
	for (int i=1, x; i<=m; i++) scanf("%d", &x), ++a[x];
	int l = 0, r = 2 * m, ans;
	while (l <= r)
	{
		int mid = (l + r) >> 1;
		if (check(mid)){ans = mid; r = mid - 1;}
		else l = mid + 1;
	}
	for (int i=1; i<=n; i++) a[i] = 0;
	printf("%d\n", ans);
}
int main()
{
	int T; scanf("%d", &T);
	while (T--) solve();
	return 0;
}

D

找到每个 \(a_i\) 能取的区间 \([l,r]\),于是问题就变成每个区间取一个数使得两两不重复 .

二分图匹配会 TLE on #4

可以贪心,枚举左端点,右端点扔到 priority_queue 里面取最小的选即可 .

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 5e5 + 233;
vector<pii> g[N];
int n;
int main()
{
	int T; scanf("%d", &T);
	while (T--)
	{
		scanf("%d", &n);
		for (int i=1, x; i<=n; i++)
		{
			scanf("%d", &x);
			int L, R;
			if (x == 0){L = i + 1; R = n;}
			else {L = i / (x + 1) + 1; R = i / x;}
			g[L].emplace_back(make_pair(R, i));
		}
		priority_queue<pii, vector<pii>, greater<pii> > q;
		vector<int> ans(n+5);
		for (int i=1; i<=n; i++)
		{
			for (auto _ : g[i]) q.emplace(_);
			auto _ = q.top(); q.pop();
			ans[_.second] = i;
		}
		for (int i=1; i<=n; i++) printf("%d ", ans[i]);
		puts("");
		for (int i=1; i<=n; i++) g[i].clear();
	} return 0;
}

标签:ABCD,typedef,int,题解,scanf,CF,long,&&,ll
来源: https://www.cnblogs.com/CDOI-24374/p/16463447.html

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

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

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

ICode9版权所有