CSU-2046: sequence

Description

给出一个长度为N的正整数序列a,你有两种变换操作:

1.把数列中的某个数乘 2。

2.把数列中的所有数减 1。

现在你需要通过最少的变换操作把这个数列中的数全部变成 0。

Input

第一行一个N。下面 N 行,每行一个正整数 $ A_i $ 描述这个数列。1 <= n <=200000, 1 <= \(a _i\) <=\(10^9\)

Output

输出一行一个正整数,表示最少的变换次数。

Sample Input

  1. 2
  2. 1
  3. 2

Sample Output

  1. 3

题解

我们考虑一个例子\(a_1 = 2, a_2 = 1025\),需要多少次变换

首先假如\(a_1\)只变幻到1023那么a1和a2无法同时到0,那么\(a_1\)至少需要10次乘法变化,那么这10次什么时候乘呢,我们并不关心,但可以知道的是必然能够通过10次变换使\(a_1和a_2\)某一时刻相等,可以这么想,\(a_1\)先乘10次2变成2048然后可以减1可以减2...这样必然可以使\(a_1和a_2\)相等。

这样我们可以得出一个数要经过的乘法变化次数为它乘多少次2可以大于最大的数,把乘法和加法次数加起来即可

  1. #include<bits/stdc++.h>
  2. #define maxn 200050
  3. using namespace std;
  4. inline int getnum() {
  5. int ans = 0; char c; int flag = 1;
  6. while (!isdigit(c = getchar()) && c != '-');
  7. if (c == '-') flag = -1; else ans = c - '0';
  8. while (isdigit(c = getchar())) ans = ans * 10 + c - '0';
  9. return ans * flag;
  10. }
  11. long long a[maxn];
  12. long long fast_pow(int a, int b) {
  13. long long ans = 1;
  14. while (b) {
  15. if (b & 1) ans *= a;
  16. a *= a;
  17. b >>= 1;
  18. }
  19. return ans;
  20. }
  21. int main() {
  22. int n = getnum();
  23. long long maxx = 0;
  24. for (int i = 1; i <= n; i++) {
  25. a[i] = getnum();
  26. maxx = max(a[i], maxx);
  27. }
  28. long long ans = 0;
  29. for (int i = 1; i <= n; i++) {
  30. int tmp = int(log2(maxx / a[i]));
  31. if (a[i] * fast_pow(2, tmp) < maxx) tmp++;
  32. ans += tmp;
  33. }
  34. printf("%lld", ans + maxx);
  35. return 0;
  36. }

CSU-2046: sequence的更多相关文章

  1. CSU 1515 Sequence (莫队算法)

    题意:给n个数,m个询问.每个询问是一个区间,求区间内差的绝对值为1的数对数. 题解:先离散化,然后莫队算法.莫队是离线算法,先按按询问左端点排序,在按右端点排序. ps:第一次写莫队,表示挺简单的, ...

  2. CSU 1515 Sequence

    莫队算法+map #include<cstdio> #include<cstring> #include<cmath> #include<map> #i ...

  3. STL or 线段树 --- CSU 1555: Inversion Sequence

    Inversion Sequence Problem's Link:   http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1555 Mean: 给你一 ...

  4. Inversion Sequence(csu 1555)

    Description For sequence i1, i2, i3, … , iN, we set aj to be the number of members in the sequence w ...

  5. CSU 1060 Nearest Sequence

    题意:求三个序列的最长公共子序列. 思路:一开始以为只要求出前两个的LCS,然后和第三个再求一遍LCS就是答案了.但是样例就对我进行啪啪啪打脸了.实际上就跟两个序列的差不多,换成三维的就行了. 代码: ...

  6. CSU 2018年12月月赛 B 2214: Sequence Magic

    Description 有一个1到N的自然数序列1,2,3,...,N-1,N. 我们对它进行M次操作,每次操作将其中连续的一段区间 [Ai,Bi][Ai,Bi] (即第Ai个元素到第Bi个元素之间的 ...

  7. CSU 1809 Parenthesis(线段树+前缀和)

    Parenthesis Problem Description: Bobo has a balanced parenthesis sequence P=p1 p2-pn of length n and ...

  8. poj 2046 Gap

    题目连接 http://poj.org/problem?id=2046 Gap Description Let's play a card game called Gap. You have 28 c ...

  9. CSU 1809 - Parenthesis - [前缀和+维护区间最小值][线段树/RMQ]

    题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1809 Bobo has a balanced parenthesis sequenc ...

  10. CSU 1809 Parenthesis(RMQ-ST+思考)

    1809: Parenthesis Submit Description Bobo has a balanced parenthesis sequence P=p1 p2…pn of length n ...

随机推荐

  1. python3基础05(有关日期的使用1)

    #!/usr/bin/env python# -*- coding:utf-8 -*- import timefrom datetime import datetime,timedelta,timez ...

  2. 梦织未来Windows驱动编程 第04课 驱动相关的数据结构

  3. 新建framework的bundle资源 linker command failed with exit code 1解決

    enable bitcode 设为no

  4. World Wind Java开发之十一——加载热点信息(仿Google Earth)(转)

    在GE的图层中有一个照片图层,在浏览时可以看到各地的一些图片,我们称之为热点信息,如下图所示: 再来看下本文的实现效果: 效果是不是很像呢,其实实现这个很简单,参照examples中的Balloons ...

  5. 【BZOJ4458】GTY的OJ(树上超级钢琴)

    点此看题面 大致题意: 给你一棵树,让你求出每一个节点向上的长度在\([l,r]\)范围内的路径权值和最大的\(m\)条路径的权值总和. 关于此题的数列版本 此题的数列版本,就是比较著名的[BZOJ2 ...

  6. Videos

    Videos 时间限制: 1 Sec  内存限制: 128 MB提交: 17  解决: 7[提交] [状态] [讨论版] [命题人:admin] 题目描述 C-bacteria takes charg ...

  7. 小w的糖果

    题目连接 : https://ac.nowcoder.com/acm/contest/923/C 算是一道找规律的题了,因为后一个人会比前一个人多,可以理解成后一个人要继承前一个人,sum为当前糖果数 ...

  8. Ubuntu 上配置静态的ip

    先关掉或卸掉 network-manager.然后,改动/etc/network/interfaces 如下:(由于是静态ip,你当然知道把例子中那些东西改成你自己的)auto lo eth0ifac ...

  9. JDBC开发,数据库的连接

    JDBC开发步骤 1.建完工程后,右击工程,new,新建一个文件夹Folder,装jar包,        2.将下载好的驱动包打开,找到jar文件,CTRL+C,选中装jar包的文件夹,CTRL+V ...

  10. 【C++学习笔记】强大的算法——spfa

    spfa的定义 PFA算法的全称是:Shortest Path Faster Algorithm,用于求单源最短路,由西南交通大学段凡丁于1994年发表.当给定的图存在负边时,Dijkstra算法就无 ...