牛客小白月赛6 J 洋灰三角

J  洋灰三角  

题目:

链接:https://www.nowcoder.com/acm/contest/136/J
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

洋灰是一种建筑材料,常用来筑桥搭建高层建筑,又称,水泥、混凝土。
WHZ有很多铸造成三角形的洋灰块,他想把这些洋灰三角按照一定的规律放到摆成一排的n个格子里,其中第i个格子放入的洋灰三角数量是前一个格子的k倍再多p个,特殊地,第一个格子里放1个。
    WHZ想知道把这n个格子铺满需要多少洋灰三角。

输入描述:

第一行有3个正整数n,k,p。

输出描述:

输出一行,一个正整数,表示按照要求铺满n个格子需要多少洋灰三角,由于输出数据过大,你只需要输出答案模1000000007(1e9+7)后的结果即可。
示例1

输入

复制
3 1 1

输出

复制
6

说明

洋灰三角铺法:1 2 3,总计6个
示例2

输入

复制
3 2 2

输出

复制
15

说明

洋灰三角铺法:1 4 10,总计15个
示例3

输入

复制
3 3 3

输出

复制
28

说明

洋灰三角铺法:1 6 21,总计28个

备注:

对于100%的测试数据:
1 ≤ n ≤ 1000000000
1 ≤ k,p ≤ 1000

思路:

      矩阵快速幂,但我是直接先求出前几项,再丢进杜教的板子就过了。

代码:

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <cassert>
#include<bits/stdc++.h>#define rep(i,a,n) for (ll  i=a;i<n;i++)
#define per(i,a,n) for (ll  i=n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((ll )(x).size())
using namespace std;
typedef long long ll;
typedef vector<ll > VI;typedef pair<ll ,ll > PII;
const ll mod=1000000007;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
// head

ll  _,n;
namespace linear_seq {const ll  N=10010;ll res[N],base[N],_c[N],_md[N];vector<ll > Md;void mul(ll *a,ll *b,ll  k) {rep(i,0,k+k) _c[i]=0;rep(i,0,k) if (a[i]) rep(j,0,k) _c[i+j]=(_c[i+j]+a[i]*b[j])%mod;for (ll  i=k+k-1;i>=k;i--) if (_c[i])rep(j,0,SZ(Md)) _c[i-k+Md[j]]=(_c[i-k+Md[j]]-_c[i]*_md[Md[j]])%mod;rep(i,0,k) a[i]=_c[i];}ll  solve(ll n,VI a,VI b) { // a 系数 b 初值 b[n+1]=a[0]*b[n]+...
//        prll f("%d\n",SZ(b));ll ans=0,pnt=0;ll  k=SZ(a);assert(SZ(a)==SZ(b));rep(i,0,k) _md[k-1-i]=-a[i];_md[k]=1;Md.clear();rep(i,0,k) if (_md[i]!=0) Md.push_back(i);rep(i,0,k) res[i]=base[i]=0;res[0]=1;while ((1ll<<pnt)<=n) pnt++;for (ll  p=pnt;p>=0;p--) {mul(res,res,k);if ((n>>p)&1) {for (ll  i=k-1;i>=0;i--) res[i+1]=res[i];res[0]=0;rep(j,0,SZ(Md)) res[Md[j]]=(res[Md[j]]-res[k]*_md[Md[j]])%mod;}}rep(i,0,k) ans=(ans+res[i]*b[i])%mod;if (ans<0) ans+=mod;return ans;}VI BM(VI s) {VI C(1,1),B(1,1);ll  L=0,m=1,b=1;rep(n,0,SZ(s)) {ll d=0;rep(i,0,L+1) d=(d+(ll)C[i]*s[n-i])%mod;if (d==0) ++m;else if (2*L<=n) {VI T=C;ll c=mod-d*powmod(b,mod-2)%mod;while (SZ(C)<SZ(B)+m) C.pb(0);rep(i,0,SZ(B)) C[i+m]=(C[i+m]+c*B[i])%mod;L=n+1-L; B=T; b=d; m=1;} else {ll c=mod-d*powmod(b,mod-2)%mod;while (SZ(C)<SZ(B)+m) C.pb(0);rep(i,0,SZ(B)) C[i+m]=(C[i+m]+c*B[i])%mod;++m;}}return C;}ll  gao(VI a,ll n) {VI c=BM(a);c.erase(c.begin());rep(i,0,SZ(c)) c[i]=(mod-c[i])%mod;return solve(n,c,VI(a.begin(),a.begin()+SZ(c)));}
};int  main() {ll   n, k, p;cin>>n>>k>>p;ll  sum[120];///求出前10项sum[1]=1;for(ll  i=2;i<=10;i++){sum[i]=(sum[i-1]*k%mod+p)%mod;}for(ll  i=2;i<=10;i++){sum[i]=(sum[i-1]+sum[i])%mod;}vector<ll >v;for(ll  i=1;i<=10;i++){v.push_back(sum[i]);}printf("%lld\n",linear_seq::gao(v,n-1));}

 

转载于:https://www.cnblogs.com/longl/p/9500825.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PureMVC(AS3)剖析:设计模式(二)

PureMVC&#xff08;AS3&#xff09;剖析&#xff1a;设计模式&#xff08;二&#xff09; 模式 上一篇中介绍了PureMVC中使用的3种设计模式&#xff1a;单例模式、观察者模式、外观模式。本篇将继续介绍剩下的3种设计模式&#xff1a; l 使用中介者&#xff08;Mediator&…

FileZilla的下载与安装以及简单使用(Ubuntu和Windows之间互传文件需要下载——客户端)

参考&#xff1a;FileZilla的下载与安装以及简单使用&#xff08;有图解超简单&#xff09; 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-08-04 13:20:59 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107782070?ops_request_misc%257B…

基于Matlab的循环码实验报告,基于MATLAB的循环码实验报告

及g(x)|C(x)上述定理告诉了构造(n&#xff0c;k)循环码的方法如下&#xff1a; ① 对xn-1 (在二元域中等效于对xn1)实行因式分解, 找出其中的(n-k)次因式。② 以找出的(n-k)次因式为循环码生成多项式g(x)&#xff0c;与信息多项式m(x)相乘&#xff0c;即得码多项式&#xff1a;…

前后端交互中,返回前端的自定义响应数据结构

在前后端交互分离的体系下&#xff0c;我们后端一般会将返回给前端的信息数据进行格式的统一&#xff0c;然后返回前端json串&#xff1b;&#xff0c;一下我提供了一个模板&#xff0c;在实际开发中可进行参考 package com.project.util;/** * Description: 自定义响应数据结构…

如何解决Filezilla 与虚拟机连接不上的问题

摘自&#xff1a;如何解决Filezilla 与虚拟机连接不上的问题 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-08-28 21:48:04 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/108287326?ops_request_misc%257B%2522request%255Fid%2522%253A…

php 访问 sharepoint列表,SharePoint—用REST方式访问列表

REST的定义与作用在SharePoint 2010中&#xff0c;基本上有如下几种数据访问方式&#xff1a; 服务器端对象模型LINQ to SharePointWeb Service客户端对象模型ADO.NET Data Service (REST协议)ADO.NET Data Service (强类型)REST是SharePoint中一种数据访问方式&#xff0c;这种…

python去除特殊字符_python去除BOM头\ufeff等特殊字符

1.\ufeff 字节顺序标记 去掉\ufeff&#xff0c;只需改一下编码就行&#xff0c;把UTF-8编码改成UTF-8-sig with open(file_path, moder, encodingUTF-8-sig) as f: s f.read() 2.\xa0 是不间断空白符 \xa0 是不间断空白符 我们通常所用的空格是 \x20 &#xff0c;是在标准AS…

Vmware虚拟机三种网络模式配图详解

目录Vmware虚拟机三种网络模式详解Vmware虚拟机三种网络模式详解 具体的文字描述参见博文&#xff1a;https://www.cnblogs.com/linjiaxin/p/6476480.html Linux——Vmware虚拟机三种网络模式详解

SQL SERVER 中identity

SQL SERVER 中identity用法&#xff1a; 在数据库中, 常用的一个流水编号通常会使用 identity 栏位来进行设置, 这种编号的好处是一定不会重覆, 而且一定是唯一的, 这对table中的唯一值特性很重要, 通常用来做客户编号, 订单编号等功能, 以下介绍关于此种栏位常用方式及相关技…

php content-type: multipart/mixed,{error:invalid multipart format} 这是什么原因,我已经在HEADER中设置了Content-...

用CULR向七牛的API上传文件每次总是invalid multipart format但是我已经设置了Content-type:multipart/form-data呀function uploadFile($localPath, $remoteFileName, $headersarray()){global $conf;$remoteFileName trim($remoteFileName,/);$policy array(scope > $co…

【AGC005F】Many Easy Problems (NTT)

Description ​ 给你一棵\(~n~\)个点的树和一个整数\(~k~\)。设为\(~S~\)为树上某些点的集合&#xff0c;定义\(~f(S)~\)为最小的包含\(~S~\)的联通子图的大小。\(~n~\)个点选\(~k~\)个点一共有\(~C_n^k~\)种方案&#xff0c;请你求出所有方案的\(~f(S)~\)的和&#xff0c; 对\…

现在学python和java哪个好_java和python学习哪个未来发展前景更好?

原标题&#xff1a;java和python学习哪个未来发展前景更好&#xff1f; 学java和python哪个更好&#xff1f;这是现在大家热议的一个问题。 Python崛起这已经是一个不争的事实&#xff0c;并且已经成为人工智能时代的第一语言。Python的优势就是在任何方面都非常强大。号称胶水…

同步IO、异步IO、阻塞IO、非阻塞IO、复用IO

参考&#xff1a;同步IO 异步IO 作者&#xff1a;今天天气眞好 发布时间&#xff1a; 2021-04-19 09:42:29 网址&#xff1a;https://blog.csdn.net/qq_51118175/article/details/115857196?spm1001.2014.3001.5501 目录同步IO与异步IO的区别&#xff1f;1.POSIX2.IO模型阻塞I…

java线程之基础学习

java线程之基础学习总结 线程实现的两种方式&#xff1a;在java中可以有两种方式实现多线程操作&#xff0c;一种是继承Thread类&#xff0c;另外一种是实现Runnable接口。 继承Thread类Thread类是在java.lang包中定义的一个类只要继承Thread类&#xff0c;要覆写run()方法。简…

Scala 学习笔记

Scala 学习笔记 1 object func_exp {2 println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet3 def hello(name: String): String {4 s"Hello, ${name}"5 } …

python反编译exe_实战 Python3.7+64位 Exe 反编译

记得有年在上海弘连培训&#xff0c;其中一个逆向题就是关于python的Exe&#xff0c;当时就想着写个文档&#xff0c;后来因为忙就拖延了下来&#xff1b;这里补上&#xff0c;而且是大补上&#xff1a;奉献一个干货&#xff0c;网上没有(我没发现)Python3.7的反编译教程&#…

树莓派外设开发之接入语音模块

参考&#xff1a;树莓派接入语音模块控制继电器组 作者&#xff1a;糯米啊啊 发布时间&#xff1a; 2021-04-18 17:07:08 网址&#xff1a;https://blog.csdn.net/weixin_43732386/article/details/115834317?spm1001.2014.3001.5501 目录1.前言2.思路3.材料4.二次开发语音模块…

php程序里如何实现图片翻页,php图片上传代码一例-php 生成翻页链接(页码)列表的...-带多种分页方式的php分页类_169IT.COM...

Class PAGE {//类开始/********************************************************* $total 记录总数* $pageNum 每页显示的条数* $url 链接* $page->StartPage(显示分类统计,字符分类/数字分页,跳转);* $page->StartPage(true/false, true/false, true/f…

图片圆角

2019独角兽企业重金招聘Python工程师标准>>> //切图为圆角 public static Bitmap removeYuanjiao(Bitmap bitmap,int pixels){ int width bitmap.getWidth(); int height bitmap.getHeight(); Bitmap creBitmap Bitmap.createBitmap(width, height, android.grap…

Java和.NET(C#)的开发用到的技术对比总结

前言 声明&#xff1a;我指的是一般的Java和.NET(C#)的后台开发用到的技术总结 最近一直在应聘ing&#xff0c;楼主的项目还是.NET(C#)项目居多&#xff0c;Java项目相对少&#xff0c;在这也吐槽下&#xff0c;招.NET(C#)的公司实在是少的可怜&#xff0c;其实非常喜欢C#语法和…