zoukankan      html  css  js  c++  java
  • C语言 · LOG大侠

    标题:LOG大侠

    atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称Log大侠。

    一天,Log大侠的好友 drd 有一些整数序列需要变换,Log大侠正好施展法力...

    变换的规则是: 对其某个子序列的每个整数变为: [log_2 (x) + 1] 其中 [] 表示向下取整,
    就是对每个数字求以2为底的对数,然后取下整。
    例如对序列 3 4 2 操作一次后,这个序列会变成 2 3 2。

    drd需要知道,每次这样操作后,序列的和是多少。

    【输入格式】
    第一行两个正整数 n m 。
    第二行 n 个数,表示整数序列,都是正数。
    接下来 m 行,每行两个数 L R 表示 atm 这次操作的是区间 [L, R],数列序号从1开始。

    【输出格式】
    输出 m 行,依次表示 atm 每做完一个操作后,整个序列的和。

    例如,输入:
    3 3
    5 6 4
    1 2
    2 3
    1 3

    程序应该输出:
    10
    8
    6


    【数据范围】
    对于 30% 的数据, n, m <= 10^3
    对于 100% 的数据, n, m <= 10^5

    注释:

    ceil():向上取整函数;

    floor():向下取整函数。

     1 #include<stdio.h>
     2 #include<math.h>
     3 int main(){
     4     int n,m;
     5     int sum=0;
     6     scanf("%d%d",&n,&m);
     7     int a[n];
     8     for(int i=0;i<n;i++){
     9         scanf("%d",&a[i]);
    10     }
    11     int l,r;
    12     for(int i=0;i<m;i++){
    13         scanf("%d%d",&l,&r);
    14         for(int j=l-1;j<=r-1;j++){
    15             //对元素a[j]求以2为底的对数,加1,再向下取整 
    16             a[j] = floor(log2(a[j])+1);
    17         }
    18         for(int k=0;k<n;k++){
    19             sum+=a[k];
    20         }
    21         printf("%d
    ",sum);
    22         sum=0;//序列和置0 
    23     }
    24     return 0 ;
    25 }
  • 相关阅读:
    windbg 内核模式调试用户进程
    深发展银行编码器(解剖)
    SIM300常用命令
    tdi驱动 for vista or later
    vm命令行控制 (vmrun)
    WMI事件监控
    Visual C++ 中 #pragma 指示符的使用
    IOCP开发的几个概念
    移动web.config文件时造成的错误,
    提高网站速度|页面优化
  • 原文地址:https://www.cnblogs.com/panweiwei/p/6661966.html
Copyright © 2011-2022 走看看