首页 > 其他分享 >Codeforces Round 953 (Div. 2) A - F

Codeforces Round 953 (Div. 2) A - F

时间:2024-06-17 09:22:31浏览次数:8  
标签:suf cout int 953 Codeforces cin Div void sim

A

编号为 \(n\) 的一定选,第二叠书在 \(1\sim n - 1\) 选最大的。

void solve() {
	cin >> n;
	for(int i = 1; i <= n; ++ i) {
		cin >> a[i];
	}
	int ans = a[n];
	int x = 0;
	for(int i = 1; i < n; ++ i) {
		x = max(x, a[i]);
	}
	cout << ans + x << '\n';
}

B

如果上来 \(b\) 就小于 \(a\),那么 \(n\) 个馒头都用 \(a\)。否则看 \(b\) 什么时候小于 \(a\),在他之前卖 \(b\),之后卖 \(a\)。

void solve() {
	ll n, a, b; cin >> n >> a >> b;
	if(b <= a) {
		cout << a * n << '\n';
	}
	else {
		ll x = b - a;
		ll y = n - x;
		if(x >= n) {
			cout << (b + (b - n + 1)) * n / 2 << '\n';
		}
		else {
			cout << (b + (b - x + 1)) * x / 2 + a * y << '\n';
		}
	}
}

C

1300 太少了。

打表找的规律,有优美做法后补。

void solve() {
	ll n, k;
	cin >> n >> k;
	ll mx = 0;
	for(int i = 1; i <= n; ++ i) {
		mx += abs(n - i + 1 - i);
	}
	if(k & 1 || k > mx) {
		cout << "No\n";
		return;
	}
	if(k == 0) {
		cout << "Yes\n";
		for(int i = 1; i <= n; ++ i) {
			cout << i << " \n"[i == n];
		}
		return;
	}
	for(int i = 1; i <= n; ++ i) {
		a[i] = 0;
	}
	k /= 2;
	for(int i = 1; i <= (n + 1) / 2; ++ i) {
		int tmp = n + 1 - 2 * i;
		if(tmp >= k) {
			a[i + k] = i;
			int p = 1;
			for(int j = i + 1; j <= n; ++ j) {
				while(a[p]) {
					++ p;
				}
				a[p] = j;
			}
			cout << "Yes\n";
			for(int j = 1; j <= n; ++ j) {
				cout << a[j] << " \n"[j == n];
			}
			return;
		}
		k -= tmp;
		a[n - i + 1] = i;
		/*
		i + 1 --> n - i + 1
		n + 1 - 2i
		*/
	}
}

D

首先,初始排名最大的不需要删人。

如果编号为 \(i\) 的人初始不是最大,必需要把 \(1\sim i - 1\) 全部删掉,否则分数加不到他头上。

此时 \(i\) 的总分为 \(\sum_{i = 1}^n a_i\),检查这个数是否大于等于 \(i + 1\sim n\) 的最大值。

如果成立,那么 \(i\) 此时就是最大的,需要删 \(i - 1\) 次。

否则还要把 \(i + 1 \sim n\) 里最大的加到自己头上,需要删 \(i\) 次。

void solve() {
	cin >> n >> c;
	for(int i = 1; i <= n; ++ i) {
		cin >> a[i];
	}
	a[1] += c;
	suf[n + 1] = 0;
	for(int i = n; i >= 1; -- i) {
		suf[i] = max(suf[i + 1], a[i]);
	}
	int p = 0;
	for(int i = 1; i <= n; ++ i) {
		if(suf[1] == a[i]) {
			p = i;
			break;
		}
	}
	ll cur = 0;
	for(int i = 1; i <= n; ++ i) {
		if(i == p) {
			cout << 0 << ' ';
		}
		else if(a[i] + cur >= suf[i + 1]) {
			cout << i - 1 << ' ';
		} 
		else {
			cout << i << ' ';
		}
		cur += a[i];
	}
	cout << '\n';
}

E

  1. 暴力怎么做?

    贪心的用 \(s\) 的 \(0\) 使 \(t\) 的 \(1\) 先变多,再用 \(t\) 的 \(1\) 使 \(s\) 的 \(1\) 变多。

  2. 能影响 \(s_i \to 1\) 的有效范围是多少?

    \(s_i\) 取决于 \(t_{i - 1}\) 和 \(t_{i + 1}\) 是否为 \(1\)。

    \(t_{i - 1}\) 取决于 \(s_{i - 2}\) 和 \(s_i\) 是否为 \(0\),而 \(s_{i - 2} = 0\) 只与原始序列有关。

    因此 \(s_i\) 的值只与 \([i - 2, i + 2]\) 有关。

我们不妨使整个 \(s\) 操作变为 \(s'\)。

对于一个询问 \([l, r]\),\([l + 2, r - 2]\) 最后结果肯定是与 \(s'\) 一致的。

然后再单独处理左右边界。

F

标签:suf,cout,int,953,Codeforces,cin,Div,void,sim
From: https://www.cnblogs.com/Luxinze/p/18251723

相关文章

  • Codeforces Round 953 Div.2 F 题解
    连通块计数的一种常见思路是钦定代表元,但发现这题的连边方式并不好指定一个代表元,那么只能尝试优化建图。我们尝试观察一下连边的情况,通过手玩样例获得一些几何直观的感受:345534453这个样例也许比较小,不过你真的把边画出来就会发现:连边形如\(2n-1\)条完整的斜线,中间......
  • Codeforces Round 953 (Div. 2)(A~D题解)
    这次比赛是我最顺利的一次比赛,也是成功在中途打进前1500,写完第三道题的时候也是保持在1600左右,但是后面就啥都不会了,还吃了点罚时,虽说如此也算是看到进步了,D题学长说很简单,但是我当时分析错了,出了一点小问题,不然最后也能定格在2000左右,下次加油。A.AliceandBooks 题意:......
  • Codeforces Round 952 (Div. 4) G. D-Function(思维)
    Problem-G-Codeforces思维题,推出公式用等比数列求和做一下。1#defineIOstd::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)2#definebug2(x,y)cout<<#x<<"is"<<x<<""<<#y<<"is"<<y<<end......
  • CodeForces 1935A
    题目链接:EntertainmentinMAC思路代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstintN=1e5+10;voidsolve(){lln;strings;cin>>n>>s;intl=0,len=s.size();while(s[l]==s[......
  • Codeforces Round 952 (Div. 4)
    A.CreatingWordstimelimitpertest:1secondmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputMatthewisgiventwostringsa......
  • Codeforces Round 947 (Div. 1 + Div. 2)
    发现今天做不了一点题,遂来补以前的比赛。B.378QAQandMocha'sArray秒了。排序,取最小的数记为\(x\),再取最小的无法被\(x\)整除的数记为\(y\),如果仍然存在无法被\(y\)整除的数,则无解。C.ChamoandMocha'sArray容易想到一个结论:如果一个数比它左边或右边的数小,那么......
  • Codeforces Round 836题解(A、B、C)
    A.SSeeeeiinnggDDoouubbllee直接将原字符串翻转一下拼到原字符串的后面就构成了回文串。strings;voidsolve(){cin>>s;cout<<s;reverse(s.begin(),s.end());cout<<s<<'\n';}B.XOR=Average分\(n\)的奇偶性考虑,若\(n\)为奇数,我们可以......
  • div+css布局实现个人网页设计(HTML期末作业)
    ......
  • Codeforces Round 952 (Div. 4) 题解分享
    A.CreatingWords思路模拟,交换输出即可codeinlinevoidsolve(){stringa,b;cin>>a>>b;swap(a[0],b[0]);cout<<a<<''<<b<<endl; return;}B.MaximumMultipleSum思路暴力枚举数学不会()codein......
  • Codeforces Round 952 (Div. 4)
    A读入两个字符串,交换第一位即可。B题意给定整数\(n\),求一个整数\(x\),满足:\(2\leqx\leqn\)。\(\displaystyle\sum\limits_{i=1}^ki\cdotx\)最大,其中\(k\)为满足\(kx\leqn\)最大的正整数。思路赛时思路可以直接枚举\(x\)的所有情况,暴力计算答案。......