zoukankan      html  css  js  c++  java
  • CodeForces

     题意:n个数1~n(n<=1e18)依次放在一个数组中,第i个数位置为2i-1,其它地方是空的。现在重复以下操作:将最右边的数放到离其左边最近的空的位置,直到所有数移到前一半的位置中。有q<=200000个询问,问你第i个数最终再哪个位置。

    题解:这题被某人秒了,所以估计核心代码量不超过2行,于是XJB找规律,找了三四十分钟A了,不明觉厉。

        找规律的方向是按照数据必定是个qlogn的算法,输入一个n,肯定要不断除2,又发现前n/2个数一直不动,又发现貌似后n/2的数有些神秘的间隔。最后XJB写了个代码直接AC了

    #define  _CRT_SECURE_NO_WARNINGS
    #include<cstdio>  
    #include<algorithm>  
    #include<iostream>
    using namespace std;
    typedef long long ll;
    
    int main() {
        ll n, q;
        cin >> n >> q;
        while (q--) {
            ll x;
            scanf("%lld", &x);
            while (1) {
                if ((x + 1) % 2 == 0) { printf("%lld
    ", (x + 1) / 2); break; }
                else x /= 2, x += n;
            }
    
        }
    
    }
    成功的路并不拥挤,因为大部分人都在颓(笑)
  • 相关阅读:
    Thinkphp注释
    THINKPHP5 如何在 控制器内调用model模型
    thinkphp5路由定义
    Thinkphp5读取当前config配置文件
    thinkphp5计算代码块的性能
    thinkphp的执行流程
    php filter过滤器
    nginx在收到stop信号后的处理
    寻找重复数
    奶牛和公牛
  • 原文地址:https://www.cnblogs.com/SuuT/p/8593815.html
Copyright © 2011-2022 走看看