首页 > 其他分享 >食物大放送 aqx

食物大放送 aqx

时间:2024-08-16 16:04:56浏览次数:3  
标签:小明 大放送 10 ll 样例 aqx leq 食物 粮食

题目描述 0.5s 512MB

小明是某个游戏中粮仓的管理者,粮食在过冬的时候被老鼠吃掉了好多,因此对不上账了。可是马上领导就要来检查了,小明很慌张。

粮仓里面一共有\(n\)堆粮食,第\(i\)堆粮食按账目上的数量,应该有\(a_i\)斤。

但是现在每一堆粮食都只剩下\(1\)斤了。

于是小明决定祭出自己的终极武器:粮食放大器。

具体地:小明每次可以使用一个从付费商城购买的粮食放大器,然后对区间\([l,r]\)使用,使用后,区间\([l,r]\)里的每一堆粮食,要么\(+1\)斤,要么\(\times 2\),这个小明可以自主决定(也就是,每一堆可以自主的选择\(+1\)或者\(\times 2\))。

由于粮食放大器很贵,所以小明决定尽量少的购买粮食放大器。

请帮助小明算一下,他最少要购买多少个粮食放大器,才能完成目标。

请注意,小明必须把每一堆粮食恰好变成\(a_i\)。

输入格式

第一行输入\(n\)。

第二行输入\(n\)个正整数,表示\(a_1,...,a_n\)。

输出格式

输出答案在单独的一行。

样例输入 #1

1
101

样例输出 #1

9

样例输入 #2

3
3 2 3

样例输出 #2

3

样例输入 #3

10
3 1 3 100 13 2 14 3 5 14

样例输出 #3

17

数据范围

对于10%的数据:\(n\leq 1,a_i\leq 10^6\)。

对于25%的数据:\(n\leq 1\)。

对于60%的数据:\(n\leq 50000\)。

对于70%的数据:\(n\leq 10^5\)。

对于80%的数据:\(n\leq 2\times 10^5\)。

对于100%的数据:\(1\leq n\leq 10^6,1\leq a_i\leq 10^{18}\)。

analysis:
求出每个数字的最大次数和最小次数,让他们尽可能接近,画图可以分析出来,如果前面的数字确定下来是x次,下一个数字如果上下界如果包含x,则当前数字的次数也是x,如果不包含,下界大于x,则取下界,上界小于x,则取上界。

obstacle:当前数字区间和前一个数字区间做比较,就傻了,应该和前一个已经确定的数字x做比较。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,b[2000005], ans;
int cal(ll x){
	ll cnt = 0;
	while(x > 1){
		cnt++;
		if(x & 1 == 1) x -= 1;
		else x >>= 1;		
	}
	return cnt;
}
struct Node{
	ll l, r;
}a[2000005];

int main(){
	cin>>n; ll x;
	for(int i = 1; i <= n; i++){
		cin>>x;
		a[i].r = x-1;
		a[i].l = cal(x);
//		cout<<"pp: "<<i<<" "<<a[i].l<<" "<<a[i].r<<endl;
	}
	if(n == 1) {
		cout<< a[1].l;	
		return 0;
	}
	
	if(a[2].l >= a[1].r){
		b[2] = a[2].l, b[1] = a[1].r;
	}
	else if(a[2].r < a[1].l){
		b[2] = a[2].r, b[1] = a[1].l;
	}
	else if(a[2].r <= a[1].r)
		b[2] = a[2].r, b[1] = a[2].r;
	else if(a[2].l >= a[1].l)
		b[2] = a[2].l, b[1] = a[2].l;
	
//	cout<<"b: "<<b[1]<<" "<<b[2]<<endl;
	for(int i = 3; i <= n; i++){
		if(a[i].l <= b[i-1] && a[i].r >= b[i-1])
			b[i] = b[i-1];
		else if(a[i].l > b[i-1])
			b[i] = a[i].l;
		else if(a[i].r < b[i-1])
			b[i] = a[i].r;
	}
//	cout<<"b: "<<b[3]<<endl;		
	for(int i = 1; i <= n; i++){
		ll y = b[i] - b[i-1];
		if(y > 0) ans += y;
	}
	cout<<ans<<endl;
	return 0;
}

标签:小明,大放送,10,ll,样例,aqx,leq,食物,粮食
From: https://www.cnblogs.com/caterpillor/p/18363059

相关文章

  • 食物
    给定一个有穷或者让无穷数列{\(a_0,a_1,...\)},则称\(g(x)=a_0+a_1x+a_2x^2+...(-1<x<1)\)为原数列的一个生成函数本质就是将问题转换为多项式问题,从而利用多项式的性质去解决问题一些生成函数的化简见OI-wiki封闭形式例题:现有\(1g,2,g,3g\)的砝码各一个,问能称出多重的物品,以及......
  • 题解_P2024 [NOI2001] 食物链
    [NOI2001]食物链题目描述动物王国中有三类动物\(A,B,C\),这三类动物的食物链构成了有趣的环形。\(A\)吃\(B\),\(B\)吃\(C\),\(C\)吃\(A\)。现有\(N\)个动物,以\(1\simN\)编号。每个动物都是\(A,B,C\)中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这......
  • P2024 [NOI2001] 食物链
    原题链接题解关系具有矢量特性,因此可以带权并查集维护code#include<bits/stdc++.h>#definelllonglongusingnamespacestd;intfa[50006];intval[50006];intfinds(intnow){if(now==fa[now])returnnow;inttem=fa[now];fa[now]=finds(fa[now])......
  • 24年最新AI 大模型面试指南(含答案)大放送!
    前言AI大模型技术经过2023年的狂飙,2024年必将迎来应用的落地,对IT同学来讲,这里蕴含着大量的技术机会,越来越多的企业开始招聘AI大模型岗位,本文梳理了AI大模型开发技术的面试之道,从AI大模型基础面、AI大模型进阶面、LangChain开发框架面、向量数据库面等不同知识维......
  • [lnsyoj110/luoguP2024]食物链
    题意原题链接三类元素\(a,b,c\)满足\(a\tob\),\(b\toc\),\(c\toa\)。现在共有\(n\)个元素,给出\(m\)条关系\(x\toy\)或\(x\)与\(y\)种类相同,输出非法或与前面所属关系相矛盾的关系数量sol并查集可以处理“朋友的朋友是朋友”这样的传递关系,却不能处理“敌人......
  • 鸿蒙案例-食物列表页和底部Panel的实现
    前言  食物列表页是健康和饮食管理应用中的一个关键功能,它允许用户浏览、搜索和选择不同的食物项来记录他们的饮食习惯。食物列表以列表形式展示食物名称、图片和简要信息。点击食物项后,展示详细的营养信息,包括热量、脂肪、碳水化合物、蛋白质等。  食物列表页是用户......
  • Acwing240食物链
    题目动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B 吃 C,C吃 A现有 N 个动物,以 1∼N 编号。每个动物都是 A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这 N 个动物所构成的食物链关系进行描述:第一种说法是......
  • 食物链题解
    由题得,所有动物整体关系如上。起初每个动物相互时间没有关系,bb[i]=i。对于x与y:如果它们是同类即x到y的距离为$0$,或者转了几圈,一圈距离为$3$,即模$3$余$0$。如果x捕食y,就是x到y距离模$3$余$1$。对x与y操作时:如果它们没有关系(它们不被之前给出的某......
  • 【食物识别】flask部署
    文章目录flask安装创建flask应用路径问题选择模型并加载接收请求参数处理推理结果返回参数flask安装pipinstallflask创建flask应用app.pyfromflaskimportFlask,request,jsonify,send_fileimporttorchfromPILimportImageimportioimportbase6......
  • 洛谷P4017 最大食物链计数
    题目信息题目要求样例输入/输出 算法简介 要知道题目需要用到什么样的算法,首先得捋清楚题目的意思比如这个题目,我们读题后可以获得这样的信息:(1)节点之间构成有向边(2)所有边不会构成环(3)需要求的所有的边没有边权而且一定是从入度为零的节点到出度为零的节点基......