BUAAOJ989 御坂御坂 约瑟夫环

OJ BUAAOJ(accoding.cn) 专栏收录该内容
0 篇文章 0 订阅

题目

BUAAOJ989

参考

代码

typedef long long ll;
typedef double db;
typedef pair<int, int> pll;

const int maxn = (int) 1e7 + 9;
const int M = 30;
const ll mod = 1000000007;
const ll mx = (ll) 1e18 + 9;
ll f[maxn];
ll a[maxn];
ll tot;

void init() {
    ll fn = 0;
    ll nn = 1;
    while (nn < mx) {
        while (fn + 3 < nn) {
            ll tmp = (nn - 1 - fn) / 3;
            if (tmp + nn >= mx) {
                tmp = (mx - nn - 1) / 3;
                nn += tmp;
                fn += tmp * 3;
                break;
            }
            nn += tmp;
            fn += tmp * 3;
        }
        f[tot] = fn;
        a[tot] = nn;
        tot++;
        nn++;
        fn = (fn + 3) % nn;
    }
}

int main() {
    int t;
    init();
    scanf("%d", &t);
    while (t--) {
        ll n, m;
        scanf("%lld%lld", &n, &m);
        ll tmp, x, fn, nn;
        x = lower_bound(a, a + tot, n) - a;
        while (m--) {
            fn = f[x];
            nn = a[x];
            tmp = fn - (nn - n) * 3;
            if (tmp + 1 == n) {
                break;
            } else {
                n = tmp + 1;
            }
            while (a[x - 1] >= n) {
                x--;
            }
        }
        printf("%lld\n", n);
    }
    return 0;
}
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值