这题是个随机化+二分裸题……………………考场上居然没有想出来……想的出来就怪了吧

我们随机一下增加x的顺序,然后进行二分之前,看看这个x加完之后能不能更新答案,不能就不二分了。具题解所说,这个复杂度是\(logp\)的。

第一次见这种东西,比较蛇皮。

代码如下:

#include <ctime>
#include <cstdio>
#include <algorithm>
using namespace std; const int maxn=10005,inf=2e9; int n,p,k,ans;
int a[maxn],b[maxn],fake[maxn]; int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
} bool check(int limit) {
int cnt=0,tmp=0;
for(int i=1;i<=n;i++) {
if(tmp+b[i]<=limit)tmp+=b[i];
else tmp=b[i],cnt++;
}
return cnt<k;
} int solve(int v) {
int l=0,r=ans;
for(int i=1;i<=n;i++)
b[i]=(a[i]+v)%p,l=max(l,b[i]);
if(!check(ans-1))return ans;
while(l<r) {
int mid=(l+r)>>1;
if(check(mid))r=mid;
else l=mid+1;
}
return r;
} int main() {
srand(time(0));
n=read(),p=read(),k=read();
for(int i=1;i<=n;i++)
a[i]=read(),ans+=a[i];
for(int i=0;i<p;i++)fake[i]=i;
random_shuffle(fake,fake+p);
for(int i=0;i<p;i++)
ans=min(ans,solve(fake[i]));
printf("%d\n",ans);
return 0;
}

moiezen的更多相关文章

  1. moiezen(2018.10.16)

    题意:有n件行李,编号为1~n.行李的质量是模 P 意义下的(P不一定是质数).有 k 个背包,要装下这些行李,为了方便在背包中找行李,每个背包中的行李编号是连续的,允许有背包为空.我们想让最重的背包 ...

随机推荐

  1. POJ-1325 Machine Schedule,和3041有着异曲同工之妙,好题!

    Machine Schedule Time Limit: 1000MS   Memory Limit: 10000K       Description As we all know, machine ...

  2. 7-14 电话聊天狂人(25 分)(Hash表基本操作)

    7-14 电话聊天狂人(25 分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10​5​​),为通话记录条数.随后N行,每行给出一条通话记录.简单 ...

  3. [luoguP2617] Dynamic Ranking(树状数组 套 主席树 + 离散化)

    传送门 BZOJ上是权限题,洛谷赞啊. 求区间 K 大数很简单. 但是如果修改某个数的话,那么就得把这个数及后面所建的主席树都更新一遍 nlogn,显然不行. 所以可以在外面套一个树状数组来优化,树状 ...

  4. java中使用Protobuf的实例(Demo)

    由于Protobuf受到推崇,故尝试采用protobuf来摒弃传统的xml进行传输数据. 首先,需要下载的关于Protobuf的文件: 1.到http://code.google.com/p/prot ...

  5. SOJ 2785_Binary Partitions

    [题意]将一个数用二进制数表示,求一共有多少种表示方法. [分析]思路一:完全背包 [代码] #include <iostream> #include <cstdio> #in ...

  6. [bzoj5101][POI2018]Powódź_并查集

    Powódź bzoj-5101 POI-2018 题目大意:在地面上有一个水箱,它的俯视图被划分成了$n$行$m$列个方格,相邻两个方格之间有一堵厚度可以忽略不计的墙,水箱与外界之间有一堵高度无穷大 ...

  7. HDU——3342 Legal or Not

    Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  8. java反射-使用反射来操纵方法

    一个类的主要成员时方法,辣么我们通过反射获取到一个类的所有方法信息后,总的寻找一种方式去操作调用这些方法,这样反射才有意义有意思. Method对象有一个方法invoke.      public O ...

  9. Servlet的文件上传

    以下内容引用自http://wiki.jikexueyuan.com/project/servlet/file-uploading.html: Servlet可以与HTML form标签一起使用允许用 ...

  10. td里面嵌套img标签后如何消除图片间隔

      td里面嵌套image标签后如何消除图片间隔 CreateTime--2018年3月7日16:18:12 Author:Marydon 情景还原: <body> <div sty ...