【五校联考1day2】JZOJ2020年8月12日提高组T1 对你的爱深不见底

题目

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 在明信片上给出了两个数n 和m,他想要告诉小Y 的信息是字符串sn 的前m个字符组成的字符串的权值。你可以帮小Y 计算一下吗?

Input

第一行输入一个正整数T 表示数据组数。

对于每组数据,第一行是两个整数n;m。保证1<= m <=|sn|

Output

对于每组数据,输出一个整数表示答案。答案可能很大,你只需要输出模258280327 后的答案。

Sample Input

2

4 3

5 5

Sample Output

1

2

Data Constraint

对于30% 的数据,n <= 20

对于60% 的数据,n <= 60

对于100% 的数据,n <= 10^3,1 <= T <= 100

题解

题意

定义一些字符串,\(s_1=a\),\(s_2=b\),\(s_i=s_{i-1}+s_{i-2}\)(例如\(s_3\)是\(ba\))

问\(s_n\)的前\(m\)个字符的权值

权值定义:对于一个字符串,前缀和后缀的相同部分的长度

分析

通过打表发现规律

找到一个最小\(n\)满足

\(|s[n]|>m+1\)

那么答案就是\(m-|s[n-2]|\)

那么直接求解即可,用高精度

Code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define mod 258280327
using namespace std;
struct gjd
{
int a[505],len;
}f[10005],Ans;
int n,k,i,t,l,r,mid,ans,dr[10005];
char ch;
bool judge(gjd &x,gjd &y)
{
int i;
if (x.len<y.len) return true;
if (x.len>y.len) return false;
for (i=x.len;i;i--)
{
if (x.a[i]<y.a[i]) return true;
if (x.a[i]>y.a[i]) return false;
}
return false;
}
void fibonacci(gjd &a,gjd &b,gjd &c)
{
int i;
for (i=1;i<=c.len;i++)
c.a[i]=0;
c.len=0;
for (i=1;i<=a.len||i<=b.len;i++)
{
c.a[i]+=a.a[i]+b.a[i];
c.a[i+1]+=c.a[i]/10;
c.a[i]%=10;
}
c.len=max(a.len,b.len);
while (c.a[c.len+1])
{
c.len++;
c.a[c.len+1]=c.a[c.len]/10;
c.a[c.len]%=10;
}
}
int main()
{
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
f[1].a[1]=1;
f[1].len=1;
f[2]=f[1];
for (i=3;i<=1001;i++)
fibonacci(f[i-2],f[i-1],f[i]);
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
Ans.len=0;
memset(Ans.a,0,sizeof(Ans.a));
ch=getchar();
while (ch<'0'||ch>'9') ch=getchar();
while (ch>='0'&&ch<='9')
{
Ans.len++;
dr[Ans.len]=ch-'0';
ch=getchar();
}
for (i=1;i<=Ans.len;i++)
Ans.a[Ans.len-i+1]=dr[i];
Ans.a[1]++;
for (i=1;i<=Ans.len;i++)
{
Ans.a[i+1]+=Ans.a[i]/10;
Ans.a[i]%=10;
}
if (Ans.a[Ans.len+1]) Ans.len++;
l=1;
r=1001;
k=0;
while (l<=r)
{
mid=(l+r)>>1;
if (judge(Ans,f[mid]))
{
k=mid;
r=mid-1;
}
else l=mid+1;
}
k-=2;
Ans.a[1]--;
for (i=1;i<=f[k].len;i++)
{
Ans.a[i]-=f[k].a[i];
if (Ans.a[i]<0)
{
Ans.a[i]+=10;
Ans.a[i+1]--;
}
}
while (!Ans.a[Ans.len]&&Ans.len>1) Ans.len--;
ans=0;
for (i=Ans.len;i;i--)
ans=((long long)ans*10+Ans.a[i])%mod;
printf("%d\n",ans);
}
return 0;
}

【五校联考1day2】JZOJ2020年8月12日提高组T1 对你的爱深不见底的更多相关文章

  1. 【五校联考1day2】JZOJ2020年8月12日提高组T2 我想大声告诉你

    [五校联考1day2]JZOJ2020年8月12日提高组T2 我想大声告诉你 题目 Description 因为小Y 是知名的白富美,所以自然也有很多的追求者,这一天这些追求者打算进行一次游戏来踢出一 ...

  2. JZOJ2020年8月11日提高组T1 密码

    JZOJ2020年8月11日提高组T1 密码 题目 Description 在浩浩茫茫的苍穹深处,住着上帝和他的神仆们,他们闲谈着下界的凡人俗事,对人世间表现的聪明智慧,大加赞赏.今天他们正在观赏大地 ...

  3. 【GDKOI2014】JZOJ2020年8月13日提高组T1 阶乘

    [GDKOI2014]JZOJ2020年8月13日提高组T1 阶乘 题目 Description Input 第一行有一个正整数T,表示测试数据的组数. 接下来的T行,每行输入两个十进制整数n和bas ...

  4. JZOJ2020年8月12日提高组反思

    JZOJ2020年8月12日提高组反思 真·难亿一点点 T1 题目长并附带伤害-- 暴力搜 对于字符串,我选择\(Pascal\) T2 概率问题,再见 T3 样例没懂,再见 T4 有史以来见过的条件 ...

  5. 【GDOI2007】JZOJ2020年8月10日提高组T1 夏娜的菠萝包

    [GDOI2007]JZOJ2020年8月10日提高组T1 夏娜的菠萝包 题目 Description 夏娜很喜欢吃菠萝包,她的经纪人RC每半个月就要为她安排接下来的菠萝包计划.今天是7月份,RC又要 ...

  6. 【NOIP2012模拟8.7】JZOJ2020年8月8日提高组T1 奶牛编号

    [NOIP2012模拟8.7]JZOJ2020年8月8日提高组T1 奶牛编号 题目 作为一个神秘的电脑高手,Farmer John 用二进制数字标识他的奶牛. 然而,他有点迷信,标识奶牛用的二进制数字 ...

  7. 【佛山市选2013】JZOJ2020年8月7日提高组T1 回文子序列

    [佛山市选2013]JZOJ2020年8月7日提高组T1 回文子序列 题目 描述 回文序列是指左右对称的序列.例如1 2 3 2 1是回文序列,但是1 2 3 2 2就不是.我们会给定一个N×M的矩阵 ...

  8. 【GDKOI2014】JZOJ2020年8月13日提高组T2 石油储备计划

    [GDKOI2014]JZOJ2020年8月13日提高组T2 石油储备计划 题目 Description Input Output 对于每组数据,输出一个整数,表示达到"平衡"状态 ...

  9. JZOJ2020年8月11日提高组T4 景点中心

    JZOJ2020年8月11日提高组T4 景点中心 题目 Description 话说宁波市的中小学生在镇海中学参加计算机程序设计比赛,比赛之余,他们在镇海中学的各个景点参观.镇海中学共有n个景点,每个 ...

随机推荐

  1. Raft算法原理剖析

    一.复制状态机(replicated state machine) Raft协议可以使得一个集群的服务器组成复制状态机,在详细了解Raft算法之前,我们先来了解一下什么是复制状态机.一个分布式的复制状 ...

  2. JNI-Thread中start方法的调用与run方法的回调分析

    前言 在java编程中,线程Thread是我们经常使用的类.那么创建一个Thread的本质究竟是什么,本文就此问题作一个探索. 内容主要分为以下几个部分 1.JNI机制的使用 2.Thread创建线程 ...

  3. Pyston v2.0 发布,解决 Python 慢速的救星

    Pyston 自从 2017 年发布 0.6.1 版本后,已经淡出了人们的视线三年多了,导致现在新人都很少听过它的大名. 前两天(2020年10月28日)Pyston 在官方博客上(https://b ...

  4. EF6 Code First 博客学习记录

    学习一下ef6的用法 这个学习过程时按照微软官网的流程模拟了一下 就按照下面的顺序来写吧 1.连接数据库  自动生成数据库 2.数据库迁移 3.地理位置以及同步/异步处理(空了再补) 4.完全自动迁移 ...

  5. 01 . Vue简介,原理,环境安装

    简介 vue是一个JavaMVVM库,是一套用于构建用户界面的渐进式框架,是初创项目的首选前端框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计.它是轻量级的,它有很多独立的功能或库 ...

  6. nice-ni 耗光cpu

    可以看到 低优先级的进程 暂用了比较高的CPU时间. top 命令中可以看到 NI 为19, 其优先级最低 但是使用cpu 最高. 说明这个进程需要经行优化了, 通过gdb 发现此进程一直都在处理报文 ...

  7. c++与c

    const char* c_str ( ) const; Get C string equivalent Generates a null-terminated sequence of charact ...

  8. 极客mysql13

    1:为啥删除了表的一半数8据,表文文件大小没变化?因为delete 命令其实只是把记录的位置,或者数据页标记为了"可复用",但磁盘文件的大小是不会变的.也可以认为是一种逻辑删除,所 ...

  9. 硬盘LBA 和CHS的关系(转)

    磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数 l         磁头(head)数:每个盘片一般有上下两面,分别对应1个磁头,共2个磁头:l         磁道(track)数:磁 ...

  10. linux中?*tee|\各类引号和-n-e\t\n

    1.通配符:?和*  ?   --匹配任意字符单次. *    --匹配任意字符任意次. [root@localhost test]# rm -fr *     2.管道符: |  将前面命令的结果传 ...