[CSP-S模拟测试]:毛三琛(随机化+二分答案)
题目传送门(内部题69)
输入格式
第一行正整数$n,P,k$。
第二行$n$个自然数$a_i$。$(0\leqslant a_i<P)$。
输出格式
仅一个数表示最重的背包的质量。
样例
样例输入:
5 5 2
0 4 2 1 3
样例输出:
5
数据范围与提示
样例解释:
取$x=3,a=\{3,2,0,4,1\}$。
分配方案为$\{3,2,0\},\{4,1\}$,质量最大的质量为$5$。
数据范围:
对于$20\%$的数据$n\leqslant 20,P\leqslant 50$。
对于$40\%$的数据$n\leqslant 1,000,P\leqslant 1,000$。
对于$100\%$的数据$n\leqslant 10,000,P\leqslant 10,000$。
题解
枚举$x$必不可少,计算答案可以用二分答案,时间复杂度是$\Theta(n\times P\log P)$的。
如果当前枚举的$x$无论如何也无法造成更优的贡献,则不去扫。
一个随机排列中比前面所有数都大的数的数量期望为$\log$。
然而这就是官方正解……
时间复杂度:$\Theta(n\times P+n\log n\log P)$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
int n,P,K;
int a[10001],b[10001];
int ans=0x3f3f3f3f;
bool judge(int x)
{
int res=0,sum=0;
for(int i=1;i<=n;i++)
{
if(b[i]>x)return 0;
if(res+b[i]>x)
{
res=0;
sum++;
}
res+=b[i];
}
return sum<K;
}
int main()
{
scanf("%d%d%d",&n,&P,&K);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=0;i<P;i++)
{
int lft=0,rht=0,res=10000;
for(int j=1;j<=n;j++)
{
b[j]=(a[j]+i)%P;
rht+=b[j];
}
if(!judge(ans))continue;
while(lft<=rht)
{
int mid=(lft+rht)>>1;
if(judge(mid)){res=mid;rht=mid-1;}
else lft=mid+1;
}
ans=min(ans,res);
}
printf("%d",ans);
return 0;
}
rp++
[CSP-S模拟测试]:毛三琛(随机化+二分答案)的更多相关文章
- [CSP-S模拟测试]:毛一琛(meet in the middle)
题目描述 历史学考后,$MYC$和$ztr$对答案,发现选择题他们没有一道选的是一样的.最后他们都考了个$C$.现在问题来了,假设他们五五开,分数恰好一样(问答题分数也恰好一样,只考虑选择题).已知考 ...
- [CSP-S模拟测试]:毛二琛(DP)
题目描述 $MYC$在$NOI2018$中,遇到了$day1T2$这样一个题,题目是让你求有多少“好”的排列.$MYC$此题没有获得高分,感到非常惭愧,于是回去专心研究排列了.如今数排列的题对$MYC ...
- [CSP-S模拟测试]:f(Trie树+二分答案+meet in middle+two pointers)
题目传送门(内部题67) 输入格式 第一行,三个整数$n$.$k$.$p$.第二行,$n$个自然数,表示$\{a_i\}$. 输出格式 输出一行,两个自然数,表示$f(res)$.$res$. 样例 ...
- 「10.13」毛一琛(meet in the middle)·毛二琛(DP)·毛三琛(二分+随机化???)
A. 毛一琛 考虑到直接枚举的话时间复杂度很高,我们运用$meet\ in\ the\ middle$的思想 一般这种思想看似主要用在搜索这类算法中 发现直接枚举时间复杂度过高考虑枚举一半另一半通过其 ...
- NOIP 模拟 $30\; \rm 毛三琛$
题解 \(by\;zj\varphi\) 二分答案,考虑二分背包中的最大值是多少. 枚举 \(p\) 的值,在当前最优答案不优时,直接跳掉. 随机化一下 \(p\),这样复杂度会有保证. Code # ...
- [CSP-S模拟测试]:platform(后缀数组+二分+线段树)
题目传送门 题目描述 走过奈何桥有一个名叫望乡台的土台,望乡台有个名曰孟婆的老妇人在卖孟婆汤.一生爱恨情仇,一世浮沉得失,都可以随这碗孟婆汤遗忘得干干净净.现在有$n$碗孟婆汤摆成一排,汤的品种不超过 ...
- [CSP-S模拟测试]:赤(red)(WQS二分+DP)
题目传送门(内部题38) 输入格式 每个输入文件包含多组测试数据.选手应当处理到文件结束($EOF$) 每一组数据包括$3$行. 第$1$行包含三个正整数$n,a,b$,表示有$n$只猫,$gyz$有 ...
- [CSP-S模拟测试]:分组配对(倍增+二分)
题目传送门(内部题108) 输入格式 输入文件第一行为两个正整数$n,M$. 接下来两行,第一行为$n$个正整数$a_1\sim a_n$,其中$a_i$表示编号为$i$的男生的实力值:第二行为$n$ ...
- [校内模拟赛T3]火花灿灿_二分答案_组合数学_贪心
火花灿灿 题目: 数据范围: 题解: 这个题真的是个神仙题. 我们对于每块石头维护一个$01$串. 这个$01$串的长度是操作次数. 如果$01$串的当前位是$1$,表示这次操作中当前石子被划分到了贡 ...
随机推荐
- 杭州集训Day4
别问我为什么没有前三天,有时间再补~ 60+60+50=170. T1 . 坐等 memset0 ( 1s 256MB )( 原题:洛谷CF1151E Number of Components ) 树 ...
- Ubuntu 安装nodejs最新版本
sudo apt update -y sudo apt install -y npm sudo npm config set registry https://registry.npm.tao ...
- 太原fpxt招标
5.31号13点多赶到太原,到yy公司,准备参加6.1号的jzfpxt投标,一起到yy山西分公司的还有北京yy总公司D工,Y工,W工等, D工负责标书及系统演示,我主要是根据D工的演示思路调整系统,演 ...
- windows下重启nginx
参考:从零学nginx-windows下reload配置无效及如何重启 因为Nginx是多进程模型,有一个主进程和多个子进程,主进程只负责管理子进程,基本的网络事件由各个子进程处理. 所以有时候当我们 ...
- [luogu5339] [TJOI2019]唱、跳、rap和篮球(容斥原理+组合数学)(不用NTT)
[luogu5339] [TJOI2019]唱.跳.rap和篮球(容斥原理+组合数学)(不用NTT) 题面 略 分析 首先考虑容斥,求出有i堆人讨论的方案. 可以用捆绑法,把每堆4个人捆绑成一组,其他 ...
- oracle管理基础知识
1.oracle的安装 win下 linux下 2.内存和后台进程=实例 为何将oracle做的如此复杂呢 1.内存: --提高查询速度 --提升处理数据的速度 2.后台进程 --为了完成特定的服务, ...
- HNUSTOJ-1257 You are my brother
1257: You are my brother 时间限制: 1 Sec 内存限制: 128 MB提交: 39 解决: 15[提交][状态][讨论版] 题目描述 Little A gets to ...
- tar.xz问价解压
1. 解压tar.xz安装包 今天去Ubuntu上安装nodejs,下载的文件是node-v8.11.1-linux-x64.tar.xz,这是两层压缩,外面是xz压缩,里层是tar压缩,所以分两步实 ...
- IntelliJIdea初次接触
1.下载 在官网下载专业版https://www.jetbrains.com/idea/ 2.修改配置 bin目录下文件如下: 修改idea64.exe.vmoptions(64位执行文件idea64 ...
- First-hitting-time model
见wiki: https://en.wikipedia.org/wiki/First-hitting-time_model