[题解]北京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的主要内容,如果未能解决你的问题,请参考以下文章
2021年北京化工大学女生赛-问题 K: Balloon-题解
2021年北京化工大学女生赛-问题 I: 我只会心疼哥哥-题解
2021-2022 北京化工大学程序设计新生赛 - 问题 N: 聪明的蚂蚁 - 题解