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;
            }
    
        }
    
    }
    成功的路并不拥挤,因为大部分人都在颓(笑)
  • 相关阅读:
    [USACO15FEB][AC自动机][栈] Censoring G
    [USACO06NOV] Round Numbers S
    Emiya家的饭
    dp
    P2498 [SDOI2012]拯救小云公主
    [HEOI2015]小L的白日梦
    SP8064 AMR10J-Mixing Chemicals
    10.24三题
    P4296 [AHOI2007]密码箱
    CF780F
  • 原文地址:https://www.cnblogs.com/SuuT/p/8593815.html
Copyright © 2011-2022 走看看