zoukankan      html  css  js  c++  java
  • 【洛谷P4343】自动刷题机【二分答案】

    题目大意:

    题目链接:https://www.luogu.org/problem/P4343
    曾经发明了信号增幅仪的发明家 SHTSC 又公开了他的新发明:自动刷题机——一种可以自动 AC 题目的神秘装置。

    自动刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写程序。每秒,自动刷题机的代码生成模块会有两种可能的结果:

    1. 写了xx行代码

    2. 心情不好,删掉了之前写的yy行代码。(如果yy大于当前代码长度则相当于全部删除。)

    对于一个 OJ,存在某个固定的长度n>0n>0,一旦自动刷题机在某秒结束时积累了大于等于nn行的代码,它就会自动提交并 AC 此题,然后新建一个文件(即弃置之前的所有代码)并开始写下一题。SHTSC 在某个 OJ 上跑了一天的自动刷题机,得到了很多条关于写代码的日志信息。他突然发现自己没有记录这个 OJ 的nn究竟是多少。所幸他通过自己在 OJ 上的 Rank 知道了自动刷题机一共切了kk道题,希望你计算nn可能的最小值和最大值。


    思路:

    明显二分答案。然后直接O(n)O(n)判断即可。
    最小值相当于写k1k-1道题目的最大值+1。
    时间复杂度O(nlogn)O(nlog n)


    代码:

    #include <cstdio>
    using namespace std;
    typedef long long ll;
    
    const int N=100010;
    ll l,r,mid,a[N];
    int n,m;
    
    bool check(ll x,ll p)
    {
    	ll sum=0,cnt=0;
    	for (int i=1;i<=n;i++)
    	{
    		sum+=a[i];
    		if (sum<0) sum=0;
    		if (sum>=x)
    			sum=0,cnt++;
    	}
    	return cnt>=p;
    }
    
    ll sum(ll x)
    {
    	ll sum=0,cnt=0;
    	for (int i=1;i<=n;i++)
    	{
    		sum+=a[i];
    		if (sum<0) sum=0;
    		if (sum>=x)
    			sum=0,cnt++;
    	}
    	return cnt;
    }
    
    int main()
    {
    	scanf("%d%d",&n,&m);
    	for (int i=1;i<=n;i++)
    		scanf("%lld",&a[i]);
    	l=1; r=100000000000000LL;
    	while (l<=r)
    	{
    		mid=(l+r)>>1;
    		if (check(mid,m+1)) l=mid+1;
    			else r=mid-1;
    	}
    	if (sum(l)>=m-1) printf("%lld ",l);
    		else
    		{
    			printf("-1 ");
    			return 0;
    		}
    	l=1; r=100000000000000LL;
    	while (l<=r)
    	{
    		mid=(l+r)>>1;
    		if (check(mid,m)) l=mid+1;
    			else r=mid-1;
    	}
    	if (sum(l-1)>=m) printf("%lld ",l-1);
    		else printf("-1 ");
    	return 0;
    }
    
  • 相关阅读:
    javascript 操作DOM元素样式
    javascript 对象
    javascript 事件对象
    javascript 常用尺寸属性
    团队编程项目作业3-模块开发过程
    buuctf-misc 基础加密
    buuctf-misc 你竟然赶我走
    buuctf-misc 大白
    buuctf-misc N种方法解决
    buuctf-misc二维码
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998006.html
Copyright © 2011-2022 走看看