首页 > 其他分享 >CF1795C Tea Tasting

CF1795C Tea Tasting

时间:2023-02-20 00:44:04浏览次数:41  
标签:std pre Tasting int Tea CF1795C cin 桌子 include

有一排桌子,每个桌子上有 \(a_i\) 杯茶,现有 \(m\) 个人,第 \(i\) 个人在一轮喝茶中要喝 \(b_i\) 杯茶,如果桌子上不满 \(b_i\)杯茶,那他将该桌子上的茶全部喝光,初始第 \(i\) 个人在第 \(i\) 个桌子前,每轮喝茶完所有人向左移动一位,求 \(n\) 轮后每个人喝了多少杯茶

比赛的时候代码截图给同学然后寄了

考虑一个桌子上的茶一定会被某一个区间的人完整的喝光,相当于我们有一个区间加的操作,最后将剩下不满足 \(b_i\) 的一个人单独计算贡献

于是我们可以记录前缀和优化查询,然后每次二分查找能喝光的最后一个人,区间加也可以用差分优化,复杂度 \(O(n\log n)\)

#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>

using i64 = long long;

const int N = 2e6 + 10, inf = 0x3f3f3f3f;

int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	int T; std::cin >> T;
	while (T--) {
		int n; std::cin >> n;
		std::vector<i64> a(n + 1), b(n + 1), pre(n + 1), ans(n + 2), res(n + 2);
		for (int i = 1; i <= n; i++) {
			std::cin >> a[i];
		}
		for (int i = 1; i <= n; i++) {
			std::cin >> b[i]; pre[i] = b[i] + pre[i - 1];
		}
		for (int i = 1; i <= n; i++) {
			int t = std::upper_bound(pre.begin() + i, pre.end(), a[i] + pre[i - 1]) - pre.begin();
			ans[i]++; ans[t]--; res[t] += a[i] - pre[t - 1] + pre[i - 1];
		}
		for (int i = 1; i <= n; i++) {
			ans[i] += ans[i - 1]; printf("%lld ", ans[i] * b[i] + res[i]);
		}
		printf("\n");
	}
	return 0;
}

标签:std,pre,Tasting,int,Tea,CF1795C,cin,桌子,include
From: https://www.cnblogs.com/zrzring/p/CF1795C.html

相关文章

  • C. Tea Tasting
    https://codeforces.com/contest/1795/problem/C用二分+前缀和+差分卡过#include<iostream>#include<cstring>#include<algorithm>#include<string>#include<cm......
  • 【前端】Steam修复愿望单数量错误
    ✨Steam愿望单数量错误Steam显示的愿望单数量:46愿望单优先级排序:1~45即愿望单数量为45实际上是由于有的游戏已经从Steam商店删除所以在愿望单中不显示但是仍然计入......
  • Gitea API 使用指南
    最近重新研究了下Git服务器Gitea的使用,完成了从Gitlab仓库迁移到Gitea的运维工作,对于这两个Git服务器的API使用有了初步的了解。在使用的过程中发现网络上的资料相对较少,而......
  • 在Teams团队中快速添加SharePoint Online站点
    前言我们在使用Office365的过程中,经常会在Teams里创建团队,用来管理项目组和收藏文档,但是,很多信息以文件形式存放并不是一个好的方式。所以,我们就可以把一些......
  • CopyOnWriteArrayList
    底层首先 CopyOnWriteArrayList内部也是通过数组来实现的,在向 CopyOnWriteArrayList添加元素时,会复制一个新的数组,写操作在新数组上进行,读操作在原数组上进行并且,写......
  • 在Windows上使用Gitea SSH遇到的问题
    在Windows中Gitea的RUN_USER(以用户名运行)可能会与Windows系统的账户系统关联,因此你可以在此处填写任意用户名,推荐填写 git。在安装界面中可以修改,如下图所示。如......
  • QByteArray 类
    QByteArray类作为字符串使用时,它会自动在字符串末尾添加'\0',末尾的'\0'不计入字符串长度。QByteArray字符串的内部编码是不固定的,比如前面QString的toLocal8Bit和......
  • 完整记录一次 Microsoft Teams 登录过程
    搜索teams打开MicrosoftTeams(workorschool)使用其他账户或注册卡在GitHubMobile认证(手机app已经认证,但是没反应).重新来一次还是没反应,使用验证器......
  • 【POJ2259】Team Queue(队列,模拟)
    problem有n个小组,进行排队。当一个人来到队伍时,若队伍中有自己小组成员时,他就直接站到其后面如果没有,则站到队伍最后面,形成自己小组的第一个入队元素。出队列时,给出出队指令......
  • UVA540 Team Queue 队列入门经典
    题意翻译有t个团队的人正在排一个长队。每次新来一个人时,如果他有队友在排队,那么新人会插队到最后一个队友的身后。如果没有任何一个队友排队,则他会被排到长队的队尾。输入......