首页 > 其他分享 >C. Tea Tasting

C. Tea Tasting

时间:2023-02-18 20:23:39浏览次数:51  
标签:Tasting int Tea long num res include

https://codeforces.com/contest/1795/problem/C

用二分+前缀和+差分卡过

#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=2e5+10;
int t;
int n;
long long a[N],b[N],s[N],res[N],num[N];
void fact(int x,int l,int r){
	num[l]++;
	int k=l-1;
	while(l<r){
		int mid=l+r>>1;
		if(s[mid]-s[k]<x) l=mid+1;
		else r=mid;
	}
	if(s[l]-s[k]<=x) num[l+1]--;
	else num[l]--,res[l]+=x-(s[l-1]-s[k]);//这里第l个人没有喝满 
}
int main(){
	cin>>t;
	while(t--){
		cin>>n;
		memset(num,0,sizeof num);//注意归零 
		memset(res,0,sizeof res);
		for(int i=1;i<=n;i++) cin>>a[i];
		for(int i=1;i<=n;i++){
			cin>>b[i];
			s[i]=s[i-1]+b[i];
		}
		for(int i=1;i<=n;i++){
			fact(a[i],i,n);
		}
		for(int i=1;i<=n;i++){
			num[i]+=num[i-1];
			res[i]+=num[i]*b[i];
			cout<<res[i]<<" ";
		}
		cout<<endl;
}
}
/*
题目大意就是给定n杯茶多少毫升和n个人能喝多少毫升,一开始第i个人在喝第i杯茶 
每喝完一次,他们就要向前走去喝第i-1杯茶,喝完为止,第一个人往前走就直接去除
思路就是对于前缀和和差分和二分
对于第i杯茶,找到第i~j这段和恰好大于a[i],然后第i个人的喝茶数就加一
对于第j个人需要特判3种情况
只需二分查找和,并记录每个人的喝茶数量,以及加上喝了不到最大喝茶量的茶
就是答案 
*/

 

标签:Tasting,int,Tea,long,num,res,include
From: https://www.cnblogs.com/liyiyang/p/17133474.html

相关文章

  • 【前端】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个团队的人正在排一个长队。每次新来一个人时,如果他有队友在排队,那么新人会插队到最后一个队友的身后。如果没有任何一个队友排队,则他会被排到长队的队尾。输入......
  • pytest学习和使用8-fixture如何实现teardown功能?(yield的使用)
    (8-fixture如何实现teardown功能?(yield的使用))1引入之前学习fixture的时候,其实这个功能就类似用例的前置,给用例执行前设置一些条件;那fixture也就相当于setup的功能;那有......