A. Dense Array

题意

T组测试样例,每组n个数据,问最少需要在当前这组数据中插入多少个数使得当前的这组数据满足相邻两个数据之间的最大值与最小值的比值小于等于2。

测试样例解释

  • input
    1
    4
    4 2 10 1
  • output
    5

对于上面的输入,解释如下。输入只包含一组测试数据,这组数据中有4个数,分别为4 2 10 1。

  • max(4,2) / min(4,2) <= 2 无需插入数据,此时ans = 0。
  • max(2,10) / min(2, 10) > 2 需要插入数据,为了满足使用最少的数据,我们可以考虑贪心的思想,在保证题目要求的前提下,经可能的让我们插入的数据的跨度最大,于是每次插入的数据最好为min的两倍,所以这里可以依次插入4,8。这两个数据,于是ans += 2。
  • max(10, 1) / min(10, 1) > 2 同上的解释,这里需要插入2,4,8,于是ans += 3。

插入完毕之后这组数据就变成了4 2 4 8 10 8 4 2 1。

思路

其实思路已经在样例解释中有所体现了,当相邻两个数据的最大值与最小值的比值大于2时,我们就需要插入数据,但是如何插入数据呢,这时我们首先应该想到在保证题目要求的前提之下,让我们插入的数据产生尽可能大的贡献,也就是尽可能大的跨度,又因为max / min <= 2,所以这个跨度我们以2倍为基准。于是此题就迎刃而解了。

Code

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<iostream>
#include<bitset>
#include<queue>
#include<map>
#include<stack>
#include<cmath>
#include<algorithm>
#include<vector>
#define ll long long
#define PI acos(-1.0)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define esp 1e-5
#define lowbit(x) x & (-x)using namespace std;const int maxx = 1e6 + 5;
const int inf = 0x3f3f3f3f;
const ll mod = 998244353;
const ll INF = 0x3f3f3f3f3f3f3f3f;int n, m, T, N;
int a[55];
int l, r, ans;int main(){int i, j, k;scanf("%d", &T);while( T-- ){ans = 0;scanf("%d", &n);for(i = 0; i < n; i++) scanf("%d", &a[i]);for(i = 1; i < n; i++){k = 0;l = min(a[i], a[i - 1]);r = max(a[i], a[i - 1]);while(l * 2 < r){l *= 2; k++;}ans += k;}printf("%d\n", ans);}return 0;
}

Codeforces Round #702 (Div. 3)——A. Dense Array相关推荐

  1. Codeforces Round #702 (Div. 3)解题报告

    Codeforces Round #702 (Div. 3) 全部题解 读错题意,写了半天真是心态爆炸,总的来看这次题目不难的. A. Dense Array http://codeforces.co ...

  2. Codeforces Round #702 (Div. 3)A-G题解

    Codeforces Round #702 (Div. 3)A-G题解 比赛链接:https://codeforces.ml/contest/1490 这场F读错题意白给一发,G二分的if(dp[mi ...

  3. Codeforces Round #727 (Div. 2) F. Strange Array 线段树 + 区间合并 + 排序优化

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的数组,对每个位置iii求一个最大价值,价值计算方式如下:选择一个包含iii的[l,r][l,r][l,r],让后将其拿出来排序,之后价值 ...

  4. Codeforces Round #702 (Div. 3)全部题解

    题目链接:https://codeforces.com/contest/1490 文章目录 A. Dense Array B. Balanced Remainders C. Sum of Cubes ...

  5. Codeforces Round #702 (Div. 3)补题

    题目链接 文章目录 A. Dense Array B. Balanced Remainders C. Sum of Cubes D. Permutation Transformation E. Acc ...

  6. Codeforces Round #702 (Div. 3) A-G

    A. Dense Array 给你 nnn 个数的数组,定义数组有效为任意两个相邻的数 max(arr[i],arr[i−1])/min(arr[i],arr[i−1])<=2max(arr[i ...

  7. Codeforces Round #702 (Div. 3)

    目录 E. Accidental Victory D. Permutation Transformation G. Old Floppy Drive E. Accidental Victory mai ...

  8. (复习次数:1)D - Permutation Transformation——Codeforces Round #702 (Div. 3)

    https://codeforces.com/contest/1490/problem/D 一手递归 终结:没有子树 继续:把最大的找到,为记录,为界,加层数,左范围,右范围 #include< ...

  9. Codeforces Round #702 (Div. 3)——B

    链接:https://codeforces.com/contest/1490 解析:此题的思路很简单,分别算出C0.C1.C2的值,最终使C0=C1=C2=n/3即可 注意:C0只能+1,即C0转化为 ...

最新文章

  1. python xlwings下载_Python学习随笔:使用xlwings读取和操作Execl文件
  2. 开发中最常使用到那些设计模式?
  3. VTK:图片之Gradient
  4. golang func 入参为func_Golang函数常见用法
  5. 转:在eclipse中搭建maven工程(第二种方法)
  6. redis 发布订阅实际案例_【赵强老师】Redis的消息发布与订阅
  7. CSAPP lab3 bufbomb-缓冲区溢出攻击实验(下)bang boom kaboom
  8. IIS Tomcat共享80端口
  9. python的gzip库使用方法
  10. Thingsboard 3.1.0 - REST API
  11. 敏感词库快速添加到mysql数据库,并在页面使用方法过滤敏感词
  12. MATLAB利用Copula函数进行频率分析
  13. 数据可视化BI平台--CBoard的使用
  14. 使用nssm管理Windows服务
  15. MySQL - 基于ibd文件恢复表数据
  16. 怎样把两个表格合并成一个
  17. RPG Maker MV 踩坑一 新仙剑菜单
  18. Linux初探之如何查看帮助文档自学命令
  19. 上海地铁+android+nfc,在上海手机竟然能当交通卡用!最全攻略来了!
  20. #常用传感器讲解十二--倾斜开关传感器(KY-020)

热门文章

  1. java 获取星期_java中如何获取日期时间中的星期几?
  2. TDog的科研(求毕业)之路——多任务图像超分辨率(一)
  3. 51妹子图客户端,开放源代码啦,欢迎拍砖
  4. php程序端的采集,php采集程序
  5. Android 自定义数字角标
  6. CacheCloud的入门运用与实战
  7. 高德车载导航Android平台DR回放技术方案
  8. navicat导入excel数据日期是1900年的问题
  9. mosquitto 群晖下载_告诉你如何轻松解决NAS系统搬家任务,群晖系统的乾坤大挪移...
  10. VR全景--720全景 助力行业数字化新模式