[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$,表示这次操作中当前石子被划分到了贡 ...
随机推荐
- python 并发编程 多进程 Process对象的其他属性方法 terminate与is_alive name pid 函数
进程对象的其他方法一: terminate与is_alive is_alive() 立刻查看的子进程结果 是否存活 from multiprocessing import Process impor ...
- SpringBoot项目快速启动停止脚本
SpringBoot项目快速启动停止脚本 1.在jar包同级目录下,创建 app.sh #!/bin/bash appName=`ls|grep .jar$` if [ -z $appName ] t ...
- Java常用的日志框架
1.Java常用日志框架对比 https://www.jianshu.com/p/bbbdcb30bba8 2.Log4j,Log4j2,Logback日志框架性能对比 https://bbs.hua ...
- [转帖]华为海思Hi1620芯片发布在即 7nm制程ARM架构最高可达3.0GHz
华为海思Hi1620芯片发布在即 7nm制程ARM架构最高可达3.0GHz https://www.cnbeta.com/articles/tech/850561.htm 中电科旗下的普华软件 支持国 ...
- Zend_Cache的使用
一.Zend_Cache快速浏览 Zend_Cache 提供了一个缓存任何数据的一般方法. 在Zend Framework中缓存由前端操作,同时通过后端适配器(File, Sqlite, Memcac ...
- Nginx 1.相关介绍
转 https://www.cnblogs.com/wcwnina/p/8728391.html Nginx的产生 没有听过Nginx?那么一定听过它的"同行"Apache吧!Ng ...
- 取石子游戏 HDU 1527 博弈论 威佐夫博弈
取石子游戏 HDU 1527 博弈论 威佐夫博弈 题意 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两 ...
- CSP-J&S 2019游记
$Day -???$ 和爱国爱党的$LQX$书记打了个赌,谁$TG$分低请另一个京味斋. $Day 0$ 机房同学去聚餐,美其名曰"散伙饭",可能又有几个进队的... 我没有去,因 ...
- 数塔 Medium
Summer is coming! It's time for Iahub and Iahubina to work out, as they both want to look hot at the ...
- CSS样式 换行
强制不换行 div{ white-space:nowrap; } 自动换行 div{ word-wrap: break-word; word-break: normal; } 强制英文单词断行 div ...