化妆品网站建设预算,河南省网站,网络营销公司策划方案,搜索引擎优化目标正题
题目大意:https://jzoj.net/senior/#main/show/3850 题目大意
定义f(i)f(i)f(i)表示第i1i1i1个斐波那契数 一个数转换成斐波那契进制后第iii位的0/10/10/1表示是否需要加上f(i)f(i)f(i)#xff0c;然后将1∼∞1\sim \infty1∼∞转换成斐波那契进制后依次输出在屏幕上1i1i1个斐波那契数 一个数转换成斐波那契进制后第iii位的0/10/10/1表示是否需要加上f(i)f(i)f(i)然后将1∼∞1\sim \infty1∼∞转换成斐波那契进制后依次输出在屏幕上求前nnn个数字有几个111。 解题思路
我们要确定最后的那个数lil_ili表示长度为iii的斐波那契进制数有多少个显然有lili−1li−2l_il_{i-1}l_{i-2}lili−1li−2。 nin_ini表示长度为iii的斐波那契进制数有多个111有ni∑j1i−2njlin_i\sum_{j1}^{i-2}n_jl_ini∑j1i−2njli。
然后我们可以确定最后数的长度之后我们考虑确定每个位数。最后确定剩下那个数剩下部分的一的个数(暴力判断即可)。 codecodecode
#includecstdio
#includecstring
#includealgorithm
#define ll long long
using namespace std;
const ll N1e610;
ll s,l[N],n[N],sl[N],sn[N],ans,z,num2;
int main()
{scanf(%lld,s);if(s0){printf(0);return 0;}if(s1){printf(1);return 0;}if(s3){printf(2);return 0;}l[1]l[2]1;n[1]n[2]1;sl[0]1;sl[1]2;sl[2]3;sn[1]1;sn[2]2;z2;s-3;ans2;while(z){l[z]l[z-2]l[z-1];n[z]l[z]sn[z-2];sl[z]l[z]sl[z-1];sn[z]n[z]sn[z-1];if(sl[z]*z) break;s-l[z]*z;numl[z];ansn[z];}ll lenz,w1;for(zlen-2;z1;z--){if(ssl[z-1]*len){numsl[z-1];s-sl[z-1]*len;anssn[z-1]sl[z-1]*w;w;}if(!s) break;}if(s){num;l[len1]l[len]l[len-1];for(int ilen;ilen-s1;i--)if(numl[i1]) ans,num-l[i1];}printf(%lld,ans);
}