对你的爱深不见底

这题的话,其实可以先打个表找一下规律,然后会发现,n是没什么卵用的,你只要关注m就行了.然而,m很大很大很大,不得不开高精,这就为解题带来了麻烦.

我们先把答案的序列打出来:

乍一看,很有规律的样子(别说你没看出来).我们再细分一下:

我们发现,划分成的子区间都是公差为1的等差数列,且区间长都是fib数.我们在观察一下:

我们发现,每个区间的第一行元素+1也是fib数!

那么,如果我们知道一个数m,我们要知道ans,我们可以通过两个fib数列推出!

我们先可以求出m>sum(fib[1~i])(fib[1]=1,fib[2]=2)中i的最大值.也就是说,我们已经推到了数m对应ans所在的区间的上一个区间的末行.

而且,我们又可以在同时求出ans所在区间的第一行的元素,那么我们就可以轻松知道ans了.

我们设数m对应ans所在的区间的上一个区间的末行的元素为x,ans所在区间的第一行的元素为y

则ans=y+m-x-1.(可以自己去推一推)

最后,注意输出的数要对那个万恶的数(为什么万恶?额,没什么)取模再输出.

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #define LL long long
 5 using namespace std;
 6 const int maxl=1005;
 7 const int TT=258280327;
 8 int n,ans;
 9 struct bigint{
10     int len,a[maxl];
11     bigint(){len=0,memset(a,0,sizeof a);}
12     void read(){
13         char c[maxl]; scanf("%s",c);
14         len=strlen(c); for (int i=1; i<=len; i++) a[i]=c[i-1]-‘0‘;
15         for (int i=1; i<=len/2; i++) swap(a[i],a[len-i+1]);
16     }
17     bigint operator + (const bigint b){
18         bigint c; c.len=max(len,b.len);
19         for (int i=1; i<=c.len; i++){
20             c.a[i]+=a[i]+b.a[i];
21             c.a[i+1]=c.a[i]/10;
22             c.a[i]%=10;
23         }
24         while (c.a[c.len+1]) c.len++;
25         return c;
26     }
27     bigint operator - (const bigint b){
28         bigint c; c.len=len;
29         for (int i=1; i<=c.len; i++){
30             c.a[i]+=a[i]-b.a[i];
31             if (c.a[i]<0) c.a[i]+=10,c.a[i+1]--;
32             c.a[i+1]+=c.a[i]/10;
33             c.a[i]%=10;
34         }
35         while (c.len>1&&!c.a[c.len]) c.len--;
36         return c;
37     }
38     bool operator > (const bigint b){
39         if (len>b.len) return 1; else if (len<b.len) return 0;
40         for (int i=len; i; i--) if (a[i]>b.a[i]) return 1;
41         else if (a[i]<b.a[i]) return 0;
42         return 0;
43     }
44     void write(){
45         for (int i=len; i>=1; i--) a[i-1]=(a[i-1]+(LL)a[i]*10%TT)%TT;
46         printf("%d",a[1]); putchar(‘\n‘);
47     }
48 }m,x,y,z,a,b,c,final,dif,one,tot;
49 int main(){
50     int T; cin>>T; one.len=1,one.a[1]=1;
51     for (; T; T--){
52         cin>>n,ans=0,m.read();
53         if (m.len==1&&m.a[1]<7){
54             if (m.a[1]==1) puts("0"); else
55             if (m.a[1]==2) puts("0"); else
56             if (m.a[1]==3) puts("1"); else
57             if (m.a[1]==4) puts("1"); else
58             if (m.a[1]==5) puts("2"); else
59             if (m.a[1]==6) puts("3");
60             continue;
61         }
62         m=m-one;
63         x.len=1,x.a[1]=2,y.len=1,y.a[1]=3,z=x+y;
64         a.len=1,a.a[1]=1,b.len=1,b.a[1]=2,c=a+b;
65         tot=z;
66         while (m>tot){
67             c=a+b; a=b; b=c;
68             final=tot+z;
69             if (!(m>final)){final=tot; break;} else tot=final;
70             x=y; y=z; z=x+y;
71         }
72         dif=m-final;
73         c=c-one; final=c+dif; final=final-one;
74         final.write();
75     }
76     return 0;
77 }

时间: 2024-10-21 19:03:21

对你的爱深不见底的相关文章

[高精度][规律][二分] Jzoj P4213 对你的爱深不见底

Description 出乎意料的是,幸运E 的小R 居然赢了那个游戏.现在欣喜万分的小R 想要写一张明信片给小Y,但是因为小R 非常羞涩,所以他打算采用一些比较神奇的方式来表达.他定义了一些字符串,s1 = a,s2 = b,si =s_i-1  +  s_i-2  (i >=3).同时他定义了一个字符串s 的权值为一个最大的i <|s|满足s 长度为i 的前缀等于长度为i 的后缀.比如字符串aba 的权值就是1,abab 的权值就是2,aaaa 的权值就是3.现在小R 在明信片上给出了两个

致青春——写给深不见底的悲伤

致青春 ——写给深不见底的悲伤 几卷雪雨,几卷寒风,江南早已是烟水迷离.青春却是一道明媚的忧伤,在烟雨江南的石子路上延伸而看不到终点,伤感,无穷尽. 曾经走过人间四季春秋,与美丽无言的青春有过相濡以沫的约定:茉莉在黄昏中浮动着神秘的幽香,终于,我还是长大了,伴着快乐与悲伤.只是,那悲伤,深不见底. 寒冷的夜风,给人淡淡的不安,阴寒的空气中,饱含着愤怒和不堪:破碎的灵魂,不忍心流年逝去中的自己与青春黯然相遇,四处流浪,天涯海角,一路听风的声音,听雨的声音,听青春久远无穷尽的声音. 我看到遥远的时空

Python里那些深不见底的“坑”

Python是一门清晰简洁的语言,如果你对一些细节不了解的话,就会掉入到那些深不见底的"坑"里,下面,我就来总结一些Python里常见的坑. 列表创建和引用 嵌套列表的创建 使用*号来创建一个嵌套的list: li = [[]] * 3 print(li) # Out: [[], [], []] 通过这个方法,可以得到一个包含3个list的嵌套list,我们来给第一个list增加一个元素: li[0].append(1) print(li) # Out: [[1], [1], [1]]

(6)“深不见底”的C#

首先我想说下C#中的Linq,大家初学时在每个程序的开头都会见到using System.Linq;,可能猜到它跟数据库有关,但是具体不清楚.这里如果编程需要用到数据库, 则需要引入System.Data.Link.它让程序与数据库轻易的连接在一起,安卓平台也有自带的数据库,但是他们两者的性能我还没有什么好的方法来比较,这一点留给聪明的读者吧! 总之,它给C#的程序员带去一道光芒,让死寂的编程出现了一丝生机,免去了配置各种数据库的苦恼.这里为了读者的理解,奉上一张PPt的图 这张图很明白的告诉你

APICLOUD APP外包行业的水深不见底

APP外包行业的水深不见底,里面的名堂似乎总也弄不懂. 对于创业者以及企业来说,这些不靠谱的外包公司就是创业路上一个个躲不过去的坑,为了能够让创业的每一个人能够走得更远,移动应用开发专家APICloud就来扒一扒关于APP外包公司的各种"套路". 当然此处主要是针对一些不良甚至恶劣的APP外包公司,切勿以偏概全,一棒子打死了APP行业的良心企业. 1."套牌"公司,都是假 现如今,胆子比天大.不少骗子公司为了能够骗钱可是什么都能干得出来.开发一个APP的成本可不低,

我想大声告诉你

"我想大声告诉你,对你的爱深不见底,用力紧紧抓住我们的回忆~~",I'm sorry,你想多了,我不想说love,I want to talk about English. 或许我们都有过对英语的憧憬.一时冲动,发奋图强,说"我要学好英语"."我爱英语"."我高中初中英语学的¥%##@%¥",可是这些建立的想的基础上.看上去精神境界很高.宣言很高调的语句究竟起到了how long的作用呢?--今天突然看到XX,"哇塞

页面前端的水有多深?再议页面开发

但凡从事互联网的人基本都会写几行html,用过Word的人用Dreamweaver也能做出规整的页面,所以大部分人会很自然地认为"页面 的开发没什么技术含量,很简单".不仅有这种普遍的认知,对从业者来说也有很多疑惑:做页面前端实现,没问题:兼容性,小case:图片集成,一直都在 用--还能有什么问题?瓶颈啊.天花板啊.转型啊.出路啊就在从业者中广泛讨论.是不是真的没什么问题了呢?网易邮箱前端技术中心也设立好几年了,似乎有 着讨论不完的话题,也经常会有一些新的想法让大家为之一振.那么页面

Linux下PHP加速器APC的安装与配置

我已经感知到他属于那">我已经感知到他属于那 个时代的">个时代的 受难者">受难者 许我和">许我和 他是社会">他是社会 同类">同类 许他随口哼唱出来">许他随口哼唱出来 歌--那">歌--那 些名歌">些名歌 情歌">情歌 民歌--我太熟悉">民歌--我太熟悉 太久违了">太久违了 我为自己庆幸"&

创业者:生得无奈,活得憋屈

自阿里巴巴登录纽交所,马云成为中国乃至亚洲首富之后,有关他的传说就从未停止过,一些网友自己瞎编的心灵鸡汤也统统扣到了大帅头上,在最疯狂的时候,你甚至搞不清楚马云究竟是一位企业家,还是一位相声演员,以至于大帅不得不亲自辟谣:有些话,真不是我说的.诚然,企业家明星化有利于传播社会正能量和行业内的创业思路,也能让中国人的信仰多元化,倒也比单纯地崇拜钟汉良.都教授更健康一些,但明星企业家的言论带给普通年轻人的导向性会更强,需要更加谨慎,毕竟,他们都曾取得过成功,也都有钱. 笔者认为,时下中国年轻人掀起的