首页 > 其他分享 >Educational Codeforces Round 143 (Rated for Div. 2)C. Tea Tasting(前缀和+二分、贡献枚举)

Educational Codeforces Round 143 (Rated for Div. 2)C. Tea Tasting(前缀和+二分、贡献枚举)

时间:2024-03-03 17:11:30浏览次数:17  
标签:Educational Rated 143 int rep cf long maxn define

C. Tea Tasting

思路

这里枚举有三种思路
ddade224bdd5d1f5173e12fa7546362.jpg
然后经过考虑3是最可行的,然后接着考虑如何计算贡献
8bfbaaa29472d7706a8bce09d06b9af.jpg
这里在实现的时候用了一个差分数组,因为我们需要记录第i个茶师它喝了多少个\(b_i\)以及不满\(b_i\)的用\(c_i\)记录,最后计算一下答案即可。

#include <bits/stdc++.h>

#define int long long
#define rep(i, a, b) for(int i = (a); i <= (b); ++i)
#define fep(i, a, b) for(int i = (a); i >= (b); --i)
#define _for(i, a, b) for(int i=(a); i<(b); ++i)
#define pii pair<int, int>
#define pdd pair<double,double>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
#define vi vector<int>

using namespace std;
const int maxn = 2e5 + 10;
int a[maxn],b[maxn],c[maxn],cf[maxn],s[maxn];
int n;

bool check(int l, int r){
    if(s[r]-s[l-1]>a[l])    return true;
    return false;
}

void solve() {
    cin>>n;
    rep(i,1,n+1){
        s[i]=c[i]=cf[i]=0;
    }
    rep(i,1,n){
        cin>>a[i];
    }
    rep(i,1,n){
        cin>>b[i];
        s[i]=s[i-1]+b[i];
    }

    rep(i,1,n){
        int l=i,r=n;
        while(l<r){
            int mid=(l+r)>>1;
            if(check(i,mid))  r=mid;
            else    l=mid+1;
        }
        if(check(i,l)){
            cf[i]+=1;
            cf[l]-=1;
            c[l]+=a[i]-s[l-1]+s[i-1];
        }else{
            cf[i]+=1;
        }
    }
    rep(i,1,n){
        cf[i]+=cf[i-1];
    }

    //计算答案
    vi ans(n+1);
    rep(i,1,n){
        ans[i]=cf[i]*b[i]+c[i];
    }

    rep(i,1,n){
        cout<<ans[i]<<' ';
    }
    cout<<endl;
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
//	freopen("C:\\Users\\24283\\CLionProjects\\untitled2\\1.in", "r", stdin);
    int _;
    cin >> _;
    while (_--)
        solve();
    return 0;
}

标签:Educational,Rated,143,int,rep,cf,long,maxn,define
From: https://www.cnblogs.com/cxy8/p/18050154

相关文章

  • 14 CodeTON Round 5 (Div. 1 + Div. 2, Rated, Prizes!)C. Tenzing and Balls(dp+前缀
    思路:dp还是挺明显的,思路可以参考最长上升子序列有点dp的感觉\(f[i]\)表示考虑前\(i\)个数,的最大值当前数有两种删或不删不删:\(f[i]=f[i-1]\);删:\(f[i]=max{f[j-1]+i-j+1}\)这个转移是\(O(n^2)\)的显然时间上来不及考虑优化,第一层循环一定是省不了的考虑优化掉第二层循环......
  • Educational Codeforces Round 162 (Rated for Div. 2)
    Preface开学了没时间组队训练就抽空把之前欠下的CF补一补这场当时玩《拔作岛》上头了忘记有比赛了,等想起来的时候已经快结束了就没现场打赛后补题发现A~E都很简单,F的话一个地方没太想清看了题解才会A.MovingChips签到,找一个极小的且包含了所有\(1\)的区间,这个区间中\(0\)......
  • CF1923 Educational Codeforces Round 162 (Rated for Div. 2)
    C.FindB给出一个数组A,对于q个询问,每个询问给出[l,r],对于A的子数组[l,r],问是否存在一个相同大小的数组B,使得两个数组的和相同,且任意相同下标的元素不同?Solution:A中任意一个大于1的元素,可以把他变成1,多余的那部分给到其他位置的元素上(如最后一个)对于等于1的元素,把......
  • Educational Codeforces Round 162 (Rated for Div. 2)
    目录写在前面ABCDE写在最后写在前面比赛地址:https://codeforces.com/contest/1923。为唐氏儿的寒假带来了一个构式的结局,飞舞一个。天使骚骚不太行啊妈的,推了三条线了感觉剧情太白开水了,咖啡馆也是这个熊样子、、、A签到。显然最优的策略是不断地选择最右侧的1进行操作,每......
  • Educational Codeforces Round 162 (Rated for Div. 2)
    EducationalCodeforcesRound162(RatedforDiv.2)A-MovingChips解题思路:模拟一下,不难发现是\(1\)之间\(0\)的个数。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;#definefifirst#definesesecondusin......
  • Educational Codeforces Round 162 (Rated for Div. 2)
    不会F的场。A答案是最左的\(1\)和最右的\(1\)之间的\(0\)的个数。Code#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;intmain(){ ios::sync_with_stdio(false); cin.tie(0); intt; cin>>t; while(t--){ intn; cin>>n......
  • Educational Codeforces Round 162 [Rated for Div. 2]
    第二次,三道题,剩下的回学校再补,总结:还是需要多练习A:让数列里所有的1都挨在一起,可以看出,相邻1之间有多少个0就需要操作几次,特判:当只有一个1或者原本全是1就输出0;voidsolve(){cin>>n;inttop1=0,top2=0,cnt=0;memset(a,0,sizeof(a));memset(b,0,siz......
  • SQL Server Accelerated Database Recovery调研
    背景  作为RDS for SQL Server团队,我们给用户提供核心的商业数据库服务,而数据库服务的SLA至关重要,而RTO又是数据库SLA的重要部分,但最近对于一些使用大规格实例的GC6以上客户,出现过一些由于重启/HA导致花费较长时间在数据库恢复过程,从而导致长时间服务不可用,严重影响了我们......
  • P1439 【模板】最长公共子序列
    首先找最大公共子序列,可以轻松想到$O(n^2)$的dp转移式子,$f_{i,j}=max\begin{cases}f_{i-1,j}&i>0\f_{i,j-1}&j>0\f_{i-1,j-1}+1&i>0,j>0,A_i=A_j\end{cases}$但是我们发现最后$n\le10^5$所以$n^2$的复杂度不够优,这个时候再看题目,发现A,B都是 1~n的排列,由此可知A,B......
  • P5143 攀爬者
    攀爬者题目背景HKE考完GDOI之后跟他的神犇小伙伴们一起去爬山。题目描述他在地形图上标记了\(N\)个点,每个点\(P_i\)都有一个坐标\((x_i,y_i,z_i)\)。所有点对中,高度值\(z\)不会相等。HKE准备从最低的点爬到最高的点,他的攀爬满足以下条件:(1)经过他标记的每一个点;......