• 第五届蓝桥杯决赛CC++B组——生物芯片


    第一部分:题目

    生物芯片

    X博士正在研究一种生物芯片,其逻辑密集度、容量都远远高于普通的半导体芯片。

    博士在芯片中设计了 n 个微型光源,每个光源操作一次就会改变其状态,即:点亮转为关闭,或关闭转为点亮。

    这些光源的编号从 1 到 n,开始的时候所有光源都是关闭的。

    博士计划在芯片上执行如下动作:

    所有编号为2的倍数的光源操作一次,也就是把 2 4 6 8 ... 等序号光源打开

    所有编号为3的倍数的光源操作一次, 也就是对 3 6 9 ... 等序号光源操作,注意此时6号光源又关闭了。

    所有编号为4的倍数的光源操作一次。

    .....

    直到编号为 n 的倍数的光源操作一次。


    X博士想知道:经过这些操作后,某个区间中的哪些光源是点亮的。


    【输入格式】
    3个用空格分开的整数:N L R (L<R<N<10^15) N表示光源数,L表示区间的左边界,R表示区间的右边界。

    【输出格式】
    输出1个整数,表示经过所有操作后,[L,R] 区间中有多少个光源是点亮的。

    例如:
    输入:
    5 2 3
    程序应该输出:
    2

    再例如:
    输入:
    10 3 6
    程序应该输出:
    3

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


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

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

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

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

    第二部分:思路

    本来我是按照原始方法写的。从L~R对2~ n进行计算,如果因子数为奇数那么该光源就是关闭的,因为是从2开始计算的,而1是所有数的一个因子,所以因子数为奇数的都关闭了。这种方法结果很明显,超时。然后看了网上的讨论。得知因子数为奇数的数叫做完全平方数,完全平方数就是能够写成m*m的形式的数,它其中一个特点就是因子数是奇数个。但是数据是10的15次方,如果一个个判断还是超时,怎么办呢?声明一个变量 i 从 L 的算术平方根开始枚举,直到 i*i 大于R。只要i*i在[L,R]范围内,那么说明编号为 i*i 的光源是关闭的。定义sum=R-L+1,表示区间内光源总数,每当光源是关闭的就减一。

    第三部分:代码

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    int main()
    {
        int n;
        long long a,b,len=0;//因为数据比较大,定义为long long 型 
        scanf("%lld%lld%lld",&n,&a,&b);
        long long sum;
        sum=b-a+1;//区间中光源总数 
        for(long long i=sqrt(a);i*i<=b;i++)
        {
                if(i*i>=a&&i*i<=b)
                {
                    sum--;//关闭的光源减去 
                }
        } 
        printf("%lld
    ",sum); 
        return 0;
    }
  • 相关阅读:
    十三、asp.net中Repeater控件用法笔记
    九、chart控件的使用(图表数据的展示)
    一、在开发数据同步系统中的开发问题:
    ubuntu编译最新版本WebKit
    android apk 防止反编译技术第四篇-对抗JD-GUI
    小菜学Chromium之OpenGL学习之二
    webkit浏览器常见开发问题
    Android图片开发内幕--基础篇
    【转载】Android Metro风格的Launcher开发系列第二篇
    world 替换+正则表达式命令
  • 原文地址:https://www.cnblogs.com/xiangguoguo/p/5362995.html
Copyright © 2020-2023  润新知