[题解]北京2018

Posted lllxq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[题解]北京2018相关的知识,希望对你有一定的参考价值。

D.Frog and Portal

构造:若从x到200有m种跳法,如何建立传送门:

当m是0时,建立x->x的传送门(特判x==0的情况)

否则,

当m是偶数时,建立x+1->x+3以及x+2>x+3的传送门,则问题转化为从x+3到200有m/2种跳法,如何建立传送门

当m是奇数时,建立x+1->199的传送门,则问题转化为从x+2到200有m-1种跳法,如何建立传送门

因为大概不到第100个斐波那契数就已经有2^32这么大了,所以这种构造方法肯定不会超范围的

#include <iostream>
#include<cstdio>
typedef long long ll;
using namespace std;

struct Node{
  ll u,v;
}ans[205];

int main()
{
    ll m;
    while(scanf("%lld",&m)!=EOF){
        ll now=0;
        ll cnt=0;
        while(1){
            if(m==0){
                if(now==0){
                  cnt++;
                  ans[cnt].u=ans[cnt].v=now+1;
                  cnt++;
                  ans[cnt].u=now+2,ans[cnt].v=now+1;
                }
                else{
                  cnt++;
                  ans[cnt].u=ans[cnt].v=now;
                }
                break;
            }
            else{
                if(m%2==1){
                    cnt++;
                    ans[cnt].u=now+1,ans[cnt].v=199;
                    now+=2,m-=1;
                }
                else{
                    cnt++;
                    ans[cnt].u=now+1,ans[cnt].v=now+3;
                    cnt++;
                    ans[cnt].u=now+2,ans[cnt].v=now+3;
                    now+=3,m/=2;
                }
            }
        }
        printf("%lld
",cnt);
        for(ll i=1;i<=cnt;i++){
            printf("%lld %lld
",ans[i].u,ans[i].v);
        }
    }
    return 0;
}

以上是关于[题解]北京2018的主要内容,如果未能解决你的问题,请参考以下文章

2018icpc北京网络赛B题题解

2021年北京化工大学女生赛-问题 K: Balloon-题解

2021年北京化工大学女生赛-问题 I: 我只会心疼哥哥-题解

2021-2022 北京化工大学程序设计新生赛 - 问题 N: 聪明的蚂蚁 - 题解

2021-2022-1 北京化工大学程序设计月赛 - 问题 G: 游戏的彩蛋 - 题解 - 哈希讲解

2021-2022-1 北京化工大学程序设计月赛 - 问题 G: 游戏的彩蛋 - 题解 - 哈希讲解