zoukankan      html  css  js  c++  java
  • hdu 5459(2015沈阳网赛) Jesus Is Here

    题目;http://acm.hdu.edu.cn/showproblem.php?pid=5459

    题意 给出一组字符串,每个字符串都是前两个字符串相加而成,求第n个字符串的c的各个坐标的差的和,结果要模530600414.

    很容易看出字符串的长度及c的个数都是由斐波那契数列构成的,得到最后结果是ans[i]=ans[i-1]+ans[i-2]+x,要求的就是x

    假设第n项中字符'c'的个数为cn,字符'c'坐标之和为sn,字符串长度为ln

    当形成第i个字符串的时候对于第i-1个字符串来说,这个串里的每个’c‘所增加的值为i-2中’c‘的反向坐标(就是串长 - 坐标,记为cc ),即c2*(c1*l1-s1);(把c1*n1-s1 拆分成一个一个的c相加,就相当于c1个cc相加)

    对于第i-2个字符串来说就是每个’c‘所增加的值就为i-1中’c‘的坐标,即c1*s2 

    两者之和就是x

    这题当输入3或者4的时候都输出0或者都输出1的时候都可以,就是说后端数据中没有3和4折两组

     1 #include<cstdio>
     2 using namespace std;
     3 typedef long long ll;
     4 int mod=530600414;
     5 ll ans[201315],c[201315],s[201315],l[201315];
     6 int main()
     7 {
     8     int t,n,i,sum;
     9     ans[3]=0;ans[4]=0;
    10     c[3]=1;s[3]=1;l[3]=3;
    11     c[4]=1;s[4]=3;l[4]=5;
    12     for (i=5;i<=201314;i++)
    13     {
    14         ans[i]=(((ans[i-1]+ans[i-2])%mod+c[i-2]*s[i-1])%mod+((c[i-2]*l[i-2]-s[i-2])%mod*c[i-1])%mod)%mod;
    15         l[i]=(l[i-1]+l[i-2])%mod;
    16         c[i]=(c[i-1]+c[i-2])%mod;
    17         s[i]=((s[i-1]+s[i-2])%mod+l[i-2]*c[i-1])%mod;
    18     }
    19     ans[3]=1,ans[4]=1;//所以这一步要不要无所谓
    20     while (~scanf("%d",&t))
    21     {
    22         sum=1;
    23         while (t--)
    24         {
    25             scanf("%d",&n);
    26             printf("Case #%d: %I64d
    ",sum++,ans[n]);
    27         }
    28     }
    29     return 0;
    30 }
  • 相关阅读:
    linux下面发布80端口的服务
    visio 安装
    SSH进行登录远程主机,实验室网站,项目
    论文遇到的问题
    ubuntu设置目录容量大小
    ubuntu 磁盘分区
    SpringBoot打成的jar包发布,shell关闭之后一直在服务器运行
    docker的安装,使用
    多线程下载文件,ftp文件服务器
    抖音红人,
  • 原文地址:https://www.cnblogs.com/JJCHEHEDA/p/4829191.html
Copyright © 2011-2022 走看看