• 第五届蓝桥杯决赛CC++B组——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


    资源约定:
    峰值内存消耗 < 256M
    CPU消耗 < 1000ms


    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

    注意: main函数需要返回0
    注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
    注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

    提交时,注意选择所期望的编译器类型。

    第二部分:思路

    就是根据所给区间把区间内的数变为[log_2 (x) + 1],可以看出,当x是2的m次幂的时候,值为m+1;x不是2的整次幂时,值为n.其中2的n-1次方小于x,2的n次方大于x。然后打印所有数的和。由于官网没有这题,不知是否正确,仅供参考。

    第三部分:代码

    #include<stdio.h>
    int log(int n)//计算n的[log_2 (x) + 1]
    {
        int time=0,sum=1;
        while(sum<n)
        {
            sum*=2;
            time++;
        }
        if(sum==n)//n是2的整次幂
        {
            return time+1;
        }
        return time;
    }
    int sum(int s[100001],int len)//求和
    {
        int sum=0;
        for(int i=0;i<len;i++)
        {
            sum+=s[i];
        }
        return sum;
    }
    int main()
    {
        int n,m,s[100001],i,j;
        scanf("%d%d",&n,&m);
        for(i=0;i<n;i++)
        {
            scanf("%d",&s[i]);
        }
        int x,y;
        while(m--)
        {
            scanf("%d%d",&x,&y);//区间
            int l;
            for(l=x-1;l<y;l++)//对区间中的数进行变换
            {
                s[l]=log(s[l]);
            } 
            printf("%d
    ",sum(s,n));
        }
        return 0;
    }
  • 相关阅读:
    Android零碎知识之Style and Theme
    Java 线程池(一):开篇及Executor整体框架介绍
    ADB命令笔记本
    volatile变量理解 via《Java并发编程实战》
    Java NIO
    乱七八糟(一)
    Android事件分发机制
    AndroidStudio下的依赖管理
    shell--填过的坑
    兼容类问题
  • 原文地址:https://www.cnblogs.com/xiangguoguo/p/5362589.html
Copyright © 2020-2023  润新知