首页 > 其他分享 >常数,玄学

常数,玄学

时间:2024-02-27 22:00:30浏览次数:26  
标签:玄学 mid long int sm ans 常数 define

这是 AC 代码:

#include<bits/stdc++.h>
#define ll long long
#define mxn 5003
#define md 1000000007
#define pb push_back
#define mkp make_pair
#define ld long double
#define umap unordered_map
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define rept(i,a,b) for(int i=a;i<b;++i)
#define drep(i,a,b) for(int i=a;i>=b;--i)
#define pq priority_queue
using namespace std;
int n,k,a[mxn],sm,mx,ans;
inline bool check(int x,int mid){
	int sm=max(a[1],0);
	rep(i,2,n){
		if(sm+k>mid||sm+k+a[i]>mid){
			--x;
			sm=max(a[i],0);
		}else if(a[i]<0)sm=0;
		else sm+=k+a[i];
	}
	if(x<0)return 0;
	return 1;
}
signed main(){
	freopen("max.in","r",stdin);
	freopen("max.out","w",stdout);
	scanf("%d%d",&n,&k);
	rep(i,1,n)scanf("%d",&a[i]),mx=max(mx,a[i]);
	rept(i,2,n)sm+=a[i];
	if(a[1]>0)sm+=a[1];
	if(n>1&&a[n]>0)sm+=a[n];
	sm+=(n-1)*k;
	int ls=1e9;
	rept(i,0,n){
		int l=mx,r=ls;
		while(l<r){
			int mid=(l+r)>>1;
			if(check(i,mid))r=mid;
			else l=mid+1;
		}
		ans=max(ans,sm-(k+1)*i-l);
		ls=l;
	}
	cout<<ans;
	return 0;
}

这是 TLE 代码:

#include<bits/stdc++.h>
#define ll long long
#define mxn 5003
#define md 1000000007
#define pb push_back
#define mkp make_pair
#define ld long double
#define umap unordered_map
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define rept(i,a,b) for(int i=a;i<b;++i)
#define drep(i,a,b) for(int i=a;i>=b;--i)
#define pq priority_queue
using namespace std;
int n,k,a[mxn],sm,mx,ans;
inline bool check(int x,int mid){
	int sm=max(a[1],0);
	rep(i,2,n){
		if(sm+k>mid||sm+k+a[i]>mid){
			--x;
			sm=max(a[i],0);
		}else if(a[i]<0)sm=0;
		else sm+=k+a[i];
	}
	if(x<0)return 0;
	return 1;
}
signed main(){
	freopen("max.in","r",stdin);
	freopen("max.out","w",stdout);
	scanf("%d%d",&n,&k);
	rep(i,1,n)scanf("%d",&a[i]),mx=max(mx,a[i]);
	rept(i,2,n)sm+=a[i];
	sm+=(n-1)*k;
	if(a[1]>0)sm+=a[1];
	if(n>1&&a[n]>0)sm+=a[n];
	int ls=1e9;
	rept(i,0,n){
		int l=mx,r=ls;
		while(l<r){
			int mid=(l+r)>>1;
			if(check(i,mid))r=mid;
			else l=mid+1;
		}
		ans=max(ans,sm-(k+1)*i-l);
		ls=l;
	}
	cout<<ans;
	return 0;
}

两者的差距只有 sm+=(n-1)*k; 这行代码的位置不同。

时限 1000ms,\(n\le 5000,k\le 10^5\)。

标签:玄学,mid,long,int,sm,ans,常数,define
From: https://www.cnblogs.com/zifanoi/p/18038466

相关文章

  • CSP 初赛玄学题
    使用g++-std=c++14-O2指令编译以下两份代码,判断哪个运行时会RE,哪个不会:#include<bits/stdc++.h>#definerept(i,a,b)for(inti=a;i<b;++i)usingnamespacestd;signedmain(){ int**a[10]; rept(i,0,10)rept(j,0,10)rept(k,0,10)a[i][j][k]=i+j-k; rept(i,0,10)rept......
  • The Child and Sequence(ds,思维玄学)
    TheChildandSequence(ds,思维玄学)题目链接Problem-E-Codeforces题目描述有一个长度为\(n\)的数列\(\{a_n\}\)和\(m\)次操作,操作内容如下:格式为1lr,表示求\(\sum\limits_{i=l}^{r}a_i\)的值并输出。格式为2lrx,表示对区间\([l,r]\)内每个数取模,模数......
  • 一些关于 OI 好玩(玄学)的事
    算法:\(Bellman-fold\)在某些情况下可以跑得比\(SPFA\)快\(SPFA\)可以跑\(dfs\),并且继承了\(bfs\)版本的玄学特性strcmp比较两个字符数组的大小是基于长度相等的基础之上的字符串比较函数不同是返回正/负(>/<)值的,并不是1/-1人文:伟大的衡中OJ评测机在以前......
  • vector<bool>的玄学问题及处理方法
    今天做题的时候搞范围循环,发现不能对vector数组元素引用。报错vector<bool>prev(26,false);for(bool&x:prev)x=true;[错误]非常量引用的初始值必须是左值这很反常识,因为其他元素的vector我都是用这样来操作元素的。同时我想到之前就遇到一个问题,无法直接......
  • 如果在循环中不改变vector的大小,C++编译器是否会将.size()优化为常数?
      在C++中,可以使用以下代码计算vector<int>中所有元素的和:vector<int>v={1,3,7,9};sums=0;for(inti=0;i<v.size();i++){sums+=v[i];}  这是一段很普通的代码,问题在于:在这段代码中,v.size()会在循环开始前仅计算一次?还是会在每次循环中都计算一次......
  • Jmeter 之常数吞吐量作用
    一  添加方法:线程组右键->添加->定时器->常数吞吐量定时器二作用:常数吞吐量定时器的作用:设置最大的吞吐量不超过设置的值注意:如果线程能发送的请求远远低于设置的最大值,那么这个最大值不会发挥作用 三基于计算吞吐量:是指控制吞吐量的对象,主要使用3类:......
  • 正常数组转换为树状结构
    1、这里子元素的标识是menuId,父id是parentId//转化后的树形结构数据getTree(menuList){letmenus=[];letsourceMap={};menuList.forEach(item=>{item.children=[];......
  • 鼎益丰暴雷:”玄学投资“创始人去哪了?
    庞氏骗局之所以能够成为经典骗术,其“诀窍”在于利用新投资者的资金支付旧投资者的回报收益,制造出一种表面上的“盈利”现象。这种方式往往让投资者误以为投资是安全的,因此很难抵挡继续投资的诱惑,最终导致损失惨重。尤其是当有些人因为短期获利而对骗局深信不疑时,更加助长了骗局的发......
  • 一阶微分方程的常数变易法/洛谷P6613
    一阶微分方程的常数变易法(1)一阶齐次线性微分方程\[\begin{aligned}F'(x)&=P(x)F(x)\\\dfrac{1}{F(x)}\timesF'(x)&=P(x)\\(\lnF(x))'&=P(x)\\\lnF(x)&=\intP(x)\textdx+\lnC\\F(x)&=Ce^{\intP(x)\textdx}\\\end{ali......
  • 时间复杂度(常数循环、strchr、冒泡排序、二分查找)
    1.1常数循环//计算复杂度voidFunc4(intk){intcount=0;for(intk=0;k<100;++k){++count;}printf("%d\n",count);}时间复杂度为:O(1)  注:O(1)不是代表算法只能运行一次,是常数次1.2strchr的时间复杂度//计算strchar的时间复杂度constchar*strchr(constc......