zoukankan      html  css  js  c++  java
  • [题解]北京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;
    }
    转载请注明出处:https://www.cnblogs.com/lllxq/
  • 相关阅读:
    再谈树形dp
    洛谷 P3627 [APIO2009]抢掠计划
    树状数组
    树形dp 入门
    洛谷P2014 选课
    洛谷P2015 二叉苹果树
    9 vue.js 被观察数组的变异方法
    8 vue的v-model指令学习
    7vue-事件修饰符
    6.vue事件绑定-click
  • 原文地址:https://www.cnblogs.com/lllxq/p/9948827.html
Copyright © 2011-2022 走看看