首页 > 其他分享 >5.4 模拟赛

5.4 模拟赛

时间:2024-05-05 09:04:39浏览次数:18  
标签:cnt 5.4 int ll T3 区间 sum 模拟

T1 T4 杀卵题不说。

做了 COCI 的原题。

T3 Rolete

为什么先说 T3 ,因为 T3 很简单。
首先先预处理出按 \(x\) 次按钮需要的时间。

根据直觉,我们观察到一个显然的贪心:如果在 \(x\) 按了 \(p_x\) 次,那么在 \(x-1\) 拉的次数 \(p_{x-1}\ge p_x\)。反证即可证明。

直接上决策单调性优化即可。
时间复杂度 \(O(n\log n)\) 。

#include<bits/stdc++.h>
#define ll long long
#define N 100005
using namespace std;
int n,t,s,k,m;
int q;
int a[N];
ll tim[N],sum[N*2],cnt[N*2];
ll res,cur;
ll ans[N];
void solve(int l,int r,int al,int ar)
{
	if(l>r) return;
	int mid=(l+r)/2,pos;
	ll res=1e18;
	for(int i=al;i<=ar;i++)
	{
		ll v=tim[i]+1ll*(sum[i+mid]-1ll*cnt[i+mid]*(i+mid))*t;
		if(v<res) res=v,pos=i;
	}
	ans[mid]=res;
	solve(l,mid-1,pos,ar);
	solve(mid+1,r,al,pos);
}
int main()
{
	scanf("%d%d%d%d",&n,&t,&s,&k);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]),m=max(m,a[i]),cnt[a[i]]++,sum[a[i]]+=a[i];
	cur=cnt[0];
	for(int i=1;i<=m;i++)
	{
		res+=1ll*cur*k+s;
		cur+=cnt[i];
		tim[i]=res;
	}
	for(int i=m;i>=0;i--) cnt[i]+=cnt[i+1],sum[i]+=sum[i+1];
	solve(0,m,0,m);
	scanf("%d",&q);
	while(q--)
	{
		int x;
		scanf("%d",&x);
		printf("%lld ",ans[x]);
	}
	return 0;
}

T2 海盗

我们考虑每个区间对答案的贡献。

具体来说,对于区间 \([l,r]\),我们先考虑区间 \([l,r]\) 独立成段的条件。我们发现 \([1,l-1]\) 需要刚好分割成完整的区间,\([r+1,n]\) 可以随便填。我们可以使用预处理一个 dp 算出长度为 \(L\) 时成一个完整区间的方案,对于 \([r+1,n]\),方案数是 \(2^{n-r}\)。

由于要我们输出 \(n\) 以内的所有答案,所以我们考虑差分数组 \(d\),具体的,如果是 \([l,r]\) 区间贡献 \(w\),我们在 \(r\) 差分加上 \(w\),之后处理完所有区间后,我们对差分数组进行前缀求和,具体的,\(d_i=d_{i-1}\times 2+d_i\)。

现在问题转化为考虑长度为 \(L\) 的区间贡献。
对于区间内每个数,我们考虑每个数对区间的贡献。

标签:cnt,5.4,int,ll,T3,区间,sum,模拟
From: https://www.cnblogs.com/g1ove/p/18173198

相关文章

  • 初三下——NOIP 模拟赛(6~10)
    6ConclusionT1注意到一次碰撞后下一次一定不会碰到,一直这样直到出去。二分找位置即可然后算一下贡献。T2dp部分重排过后肯定是0+01+1的形式。于是根据这个dp。上面的dp冗余在其对于段数枚举了分界点。于是我们考虑就对于当前这个元素\(i\)进行单独考虑。记录是......
  • 初三下——NOIP 模拟赛(1~5)
    R1rk10-。220pts。T23都读错题。浪费了将近60分钟。改。T2对于组合的掌握仍然不够熟练。找规律考虑每个点的贡献,应该使用0/1,而不是原数。转化过后可以在01矩阵上找规律了。(现在还是没搞懂那个原理)=》组合\((i,j)\bmod2=1\),当前仅当j在二进制下是i的子集,根据......
  • 初三下——NOIP 模拟赛(1~5)
    R1rk10-。220pts。T23都读错题。浪费了将近60分钟。改。T2对于组合的掌握仍然不够熟练。找规律考虑每个点的贡献,应该使用0/1,而不是原数。转化过后可以在01矩阵上找规律了。(现在还是没搞懂那个原理)=》组合\((i,j)\bmod2=1\),当前仅当j在二进制下是i的子集,根据......
  • 力扣1235 2024.5.4
    原题网址:https://leetcode.cn/problems/maximum-profit-in-job-scheduling/submissions/529098063/个人难度评价:1600分析:一眼DP,考虑DP顺序,DP递推式与边界十分类似背包,记i为第i段时间,显然有dp[i]=max(dp[i-1],dp[b[i]]+p[i])由此得出递推顺序为按结束时间为第一关键字升序递推......
  • 初三奥赛模拟测试5
    前言\(T1~100pts\):最开始没想出来,打了\(T3\)才去打。\(T2~0pts\):代码太难调没打出来。\(T3~0pts\):记忆化打假了,而且\(ans\)初始值忘记为\(0\),且捆绑测试……\(T4~0pts\):无人会。比赛链接。T1特殊字符串用\(f_i\)表示前\(i\)个字符中并以第\(......
  • 5月3日模拟赛题解(李时珍的皮肤衣 , 马大嘴的废话 , SSY的队列 , 清理牛棚 , 历史の研究)
    T1李时珍的皮肤衣发现是二进制进位,所以直接快速幂即可。#include<bits/stdc++.h>#defineint__int128inlineintread(){charch=getchar();intx=0,f=1;for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'......
  • 个人算法竞赛模板(2024.5.4)
    精简版:#include<algorithm>#include<cmath>#include<cstring>#include<iostream>#include<map>#include<queue>#include<set>#include<stack>#include<string>#include<vector>#include<......
  • 初三奥赛模拟测试1
    初三奥赛模拟测试1T1回文暴力\(dp\)是\(n^4\)的。类似传纸条吧无用状态去了就是\(n^3\)的CODE#include<bits/stdc++.h>usingnamespacestd;usingllt=longlong;usingllf=longdouble;usingull=unsignedlonglong;#defineFor(i,a,b,c)for(inti=(a);i<=......
  • CSS & JS Effect – 用 wheel 模拟 scroll
    前言在用JavaScript实现positionsticky 文章中,我提到了用wheel来模拟scroll效果。这篇来说说具体怎么实现,挺简单的哦。 Preparationtable.html<divclass="container"><table><thead><tr><th>FirstName</th>&l......
  • 集训 4 & 模拟 5
    集训4&模拟5有点唐简单,所以一起写了(其实是因为之前懒得写)集训4:T1模拟,赛时不删调试保龄了。T2显然贪心T3发现显然要两两互质,有因为父比子小,所以方案数就是将\(\varphi\)乘起来(甚至都不需要线性筛)T4meetinmiddle板子。模拟5T1特殊字符串显然有\(n^2\)......