首页 > 其他分享 >AtCoder Beginner Contest 314 A - Ex题解

AtCoder Beginner Contest 314 A - Ex题解

时间:2023-08-13 16:11:52浏览次数:36  
标签:AtCoder rv Beginner Contest int 题解 lv maxn define

AtCoder Beginner Contest 314

A - 3.14

嗯,你可以用string 存小数点后的...

B - Roulette

对于每一个金额,用个vector存 pair <>存一个人赌了多少,以及是哪一个人 。

C - Rotate Colored Subsequence

每种数用个双向链表记下来。

D - LOWER

我们观察到,对于2,3操作,只有最后一次有用,且具有全局性操作。

对于1操作,我们模拟,并看最后是否被覆盖就行了。

E - Roulettes

好一个题面

像一个背包,要平衡代价与收益,且是有依赖的背包,必须把小的更新完才能更新大的。

我们记\(f_i\)表示从\(i\)转移到\(m\)的期望次数。

\(f_i \leftarrow \min\{\frac{\sum_j f_{i - s_{j,k}}}{p_j}+c_j\}\)

F - A Certain Game

我们可以每次建立一个新点来存下每次合并后的team。

用并查集存下维护每个人的所属队伍。

最后一次dfs更新答案。

\(O(\alpha n)\)

G - Amulets

显然能打败的monster随我们所拥有的护身符数量单调不严格递增。

我们考虑双指针,然后我们所选护身符肯定是当前的前\(k\)大。

这个可以用平衡树权值线段树做,每次动态开点,线段树上二分即可。

#include <bits/stdc++.h>
#define for_(i,a,b) for (int i = (a); i < (b); i++)
#define rep_(i,a,b) for (int i = (a); i <= (b); i++)
#define per_(i,a,b) for (int i = (a); i >= (b); i--)
#define pii pair<int, int>
#define pll pair<ll, ll> 
#define ll long long
#define endl '\n'
#define int ll
using namespace std;
const int maxn = 3e5 + 10, mod = 998244353;// mod = 1949777;
int n, m, h;
int a[maxn], b[maxn];
int inf = 1e15;
const int N = 1.5e7;
struct node{
	int ls, rs, lv, rv, cnt, val;
}t[N];

int c[maxn];
int cnt = 1;
void upd(int p, int lv, int rv, int x, int y) {
	if (lv == rv) {
		t[p].cnt += y;
		t[p].val += lv * y;
		return;
	}
	int mid = (lv + rv) / 2;
	if (x <= mid) {
		if (!t[p].ls) t[p].ls = ++cnt, t[cnt].lv = lv, t[cnt].rv = mid;
		upd(t[p].ls, lv, mid, x, y);
	} else {
		if (!t[p].rs) t[p].rs = ++cnt, t[cnt].lv = mid + 1, t[cnt].rv = rv;
		upd(t[p].rs, mid + 1, rv, x, y);
	}
	t[p].cnt = ((t[p].ls ? t[t[p].ls].cnt : 0) +  (t[p].rs ? t[t[p].rs].cnt : 0));
	t[p].val = ((t[p].ls ? t[t[p].ls].val : 0) +  (t[p].rs ? t[t[p].rs].val : 0));
}
int fuct(int x) {
	int p = 1;
	if (t[p].cnt <= x) return t[p].val;
	int sum = 0;
	while(x) {
		if (t[t[p].rs].cnt <= x) {
			x -= t[t[p].rs].cnt;
			sum += t[t[p].rs].val;
			p = t[p].ls;
		} else {
			p = t[p].rs;
		}
		if (t[p].lv == t[p].rv) {
			sum += t[p].lv * x;
			break;
		}
	}
	return sum;
}
int ans[maxn];
signed main() {
	#ifdef LOCAL
		freopen("w.in", "r", stdin);
	#endif
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> n >> m >> h;
	rep_(i, 1, n){
		cin >> a[i] >> b[i];
	}
	t[1].lv = 1, t[1].rv = inf;
	
	int j = 0, tot = 0;
	rep_(i, 0, m) {
		while(j <= n && tot - fuct(i) < h) {
			j++;
			tot += a[j];
			if (c[b[j]]) upd(1, 1, inf, c[b[j]], -1);
			c[b[j]] += a[j];
			if (c[b[j]]) upd(1, 1, inf, c[b[j]], 1); 
		}
		ans[i] = j - 1;
		
	}
	rep_(i, 0, m) {
		cout << ans[i] << ' ';
	}
	cout << endl;
 	return 0; 
}
//by whc
 
 

Ex - Disk and Segments

如果设\(f(x,y)\)表示在\((x, y)\)这个点对的答案值的话。

固定\(x\),考察\(y\) ,显然是一个单峰函数。

扩展到二维,\(x\)应该也是个单峰函数,(但是本蒟蒻不会证)。

然后我们对两个维度分别三分逼近值。

对于一个点到线段的距离,可以叉积出面积然后除以底边长(orz wls)。

标签:AtCoder,rv,Beginner,Contest,int,题解,lv,maxn,define
From: https://www.cnblogs.com/Cranew/p/at_abc314.html

相关文章

  • 杂题题解
    UOJ21缩进优化题目链接记\(M=\max(a_i)\)从反面考虑,考虑\(x\)让答案减小的量。即为$\sum_{i=1}^n\lfloor\frac{a_i}{x}\rfloor\times(x-1)=(x-1)\sum_{i=1}^n\lfloor\frac{a_i}{x}\rfloor$。只需要快速计算$S=\sum_{i=1}^n\lfloor\frac{a_i}{x}\rfloor$。可以......
  • ABC 314 F 题解
    原题传送门题意有n支队伍进行比赛,起初,第i支队伍只有选手i一个人。总共要进行n-1场比赛,每次给出p和q,意为让p所在的队伍与q所在的队伍进行比赛(数据保证此时p和q不在同一支队伍),设p所在的队伍有\(siz_p\)个人,q所在的队伍有\(siz_q\)个人,则此次比赛中p......
  • 【KMP】border 题解
    题目描述输入输出样例输入abaabaa样例输出17样例解释:f[2][a]=1f[3][a]=1f[4][a]=1f[4][b]=2f[5][a]=1f[5][b]=2f[6][a]=3f[7][a]=4f[7][b]=2以上为>0的f[][],求和=17数据范围限制这一篇同上一篇,都是从以前博客搬过来的,所以真的是......
  • 猴子拆房 题解
    题目描述输入输出样例输入【样例输入1】22345【样例输入2】3242513【样例输入3】6353417174241样例输出【样例输出1】3【样例输出2】0【样例输出3】10数据范围限制提示这个是我的,是我的QWQ,我没有转载,只是把以前的博客搬运......
  • 「题解注释」P7518 [省选联考 2021 A/B 卷] 宝石
    联合省选2021宝石题解-hezlik的博客-洛谷博客(luogu.com.cn)耗时:一晚上+半个上午代码注释:#include<bits/stdc++.h>usingnamespacestd;constintN=500000,C=21;intRi(){intx=0,y=1;charc=getchar();for(;c<'0'||c>'9';c=getchar())if......
  • CF452C 题解
    洛谷链接&CF链接题目简述有\(m\timesn\)张牌,有\(n\)个种类,每个种类有\(m\)张,现在抽一张放回,再抽一张,求这张牌与第一张抽出的牌种类相同的概率。思路本题是一道结论题,我们来推一下公式。首先需要特判一个点:只有\(1\)张牌,即\(n=m=1\),那么两次抽都会是这张牌,所......
  • acwing 116.飞行员兄弟 (算法竞赛进阶指南 p48 t1 ) 题解
    原题链接https://www.acwing.com/problem/content/description/118/题目描述“飞行员兄弟”这个游戏,需要玩家顺利的打开一个拥有16个把手的冰箱。已知每个把手可以处于以下两种状态之一:打开或关闭。只有当所有把手都打开时,冰箱才会打开。把手可以表示为一个4х4的矩阵,您可以......
  • IDEA/Android Studio的gradle控制台输出中文乱码问题解决
    原文地址:IDEA/AndroidStudio的gradle控制台输出中文乱码问题解决-Stars-One的杂货小窝在项目中,有使用到Gradle自定义脚本,会有些输出日志,但是输出中文就变成乱码了..本篇就介绍下解决方法乱码效果如下图所示步骤我是window系统,不知道其他系统会不会出现这个问题乱......
  • Codeforces Round 874 G题解
    做不动那么多题了,来个GG就是问你一棵树能切成多少个大小为3的链,想了半天,想过dp啥的,但是后来发现这个贪心就好了,可以证明贪心找不到的,其他方法也找不到好久没复健了,这是第一次,感觉以后要多做题才可以#include<bits/stdc++.h>usingnamespacestd;constexprintlimit=(4e......
  • 国标GB28181视频平台LntonGBS(源码版)国标视频云服务平台主子码流都为H.265时,切换出现花
    国标视频云服务LntonGBS平台是基于国标GB28181协议的平台,可实现的视频能力有:实时直播、视频录像、语音对讲、云存储、检索及回放、告警、级联等。平台支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等格式。最近有用户反馈,在LntonGBS平台......