L The Digits String(没有写完,有空补)
链接:https://ac.nowcoder.com/acm/contest/338/L
来源:牛客网
Consider digits strings with length n, how many different strings have the sum of digits are multiple of 4?
输入描述:
- There are several test cases end with EOF. For each test case, there is an integer in one line: n, the length of the digits string. (1≤n≤1,000,000,000).
输出描述:
- For each case, output the number of digits strings with length n have the sum of digits are multiple of 4 in one line. The numbers maybe very large, you should output the result modular 2019.
输出
- 3
- 25
- 249
- 479
- 题目大意
- • 求长度为n的数字串中,有多少个这样数字串,其数字
- 之和是4的倍数(包括0)
- • 输入:每组测试数据一行,包含一个正整数n( ≤ c≤ )
- • 输出:对于每组测试数据,输出一行,包含一个整数, 表示有多少个这样数字串,其数字之和是4的倍数(包 括0)。因为这个结果很大,所以将值模2019输出
- • 本题快速幂,复杂度为O(logn)。标程在1000组测试 数据下的运行时间约为60毫秒(第二标程运行时间约 30毫秒)。建议时间限制为1秒,空间限制为64M。
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <cmath>
- #include <cfloat>
- #include <climits>
- #include <iostream>
- #include <string>
- #include <vector>
- #include <list>
- #include <queue>
- #include <stack>
- #include <map>
- #include <set>
- #include <algorithm>
- #include <bitset>
- using namespace std;
- #define LL long long
- const int matrix_size = 4;
- const int MOD = 2019;
- int add(int a, int b)
- {
- a += b;
- if(a >= MOD)
- {
- return a - MOD;
- }
- return a;
- }
- struct Matrix
- {
- int size;
- int num[matrix_size][matrix_size];
- void operator=(const Matrix &m)
- {
- for(int i = 0; i < size; ++i)
- {
- memcpy(num[i], m.num[i], sizeof(int) * size);
- }
- }
- void Init()
- {
- for(int i = 0; i < size; ++i)
- {
- memset(num[i], 0, sizeof(int) * size);
- num[i][i] = 1;
- }
- }
- void Set()
- {
- size = 4;
- memset(num, 0, sizeof(num));
- for(int j = 0; j < 4; ++j)
- {
- for(int i = 0; i < 10; ++i)
- {
- ++num[(j + i) % 4][j];
- }
- }
- }
- void operator*=(const Matrix &m)
- {
- static Matrix ans;
- ans.size = size;
- for(int i = 0; i < size; ++i)
- {
- for(int j = 0; j < size; ++j)
- {
- ans.num[i][j] = 0;
- for(int k = 0; k < size; ++k)
- {
- ans.num[i][j] = add(ans.num[i][j], (LL)num[i][k] * m.num[k][j] % MOD);
- }
- }
- }
- (*this) = ans;
- }
- void fast_pow(LL n)
- {
- static Matrix ans;
- ans.size = size;
- for(ans.Init(); n != 0; n >>= 1)
- {
- if((n & 1) == 1)
- {
- ans *= (*this);
- }
- (*this) *= (*this);
- }
- (*this) = ans;
- }
- };
- int n;
- Matrix m;
- int main()
- {
- #ifdef Dmaxiya
- freopen("test.txt", "r", stdin);
- #endif // Dmaxiya
- ios::sync_with_stdio(false);
- while(scanf("%d", &n) != EOF)
- {
- m.Set();
- m.fast_pow(n);
- printf("%d\n", m.num[0][0]);
- }
- return 0;
- }
标答
- •#include <stdio.h>
- •#define M 2019
- •#define L 4
- •#define LP(i) for(i=0;i<L;++i)
- •void Product(int x[L][L],int y[L][L],int z[L][L]){
- • int i,j,k,w[L][L]={};
- • LP(i)LP(j)LP(k)w[i][j]=(w[i][j]+x[i][k]*y[k][j])%M;
- • LP(i)LP(j)z[i][j]=w[i][j];}
- •
- •void FPow(int n,int r[L][L]){
- • int i,j,A[L][L]={{,,,},{,,,},{,,,},{,,,}};
- • LP(i)LP(j)r[i][j]=i==j?:;
- •while(n){
- •if(n&)Product(r,A,r);
- •Product(A,A,A);
- • n>>=;}}
- •int cal(int n){
- •int r[L][L];
- •FPow(n,r);
- • return (*r[][]+*r[][]+*r[][]+*r[][])%M;}
- •
- •int main(){
- •int n;
- •while(scanf("%d",&n)!=EOF&&n>)
- •printf("%d\n",cal(n-));
- •return ;}
- 解题思路(续)
- • 矩阵
- •
- •
- •
- •
- • 有四个特征根,分别是0,,+i,-i;
- • 所以an=x10n+ycos(nπ/)+zsin(nπ/),根据
- a1=,a2=,a3=,可得:
- • an=(10n+2sqrt()ncos(nπ/))/;
- • 同样快速幂求得答案。
- •#include <stdio.h>
- •#define M 2019
- • int rt[][],et[]={,,,-,-,-,,};
- •int FPow(int f,int n){
- • int r=,m=;
- •while(n){
- • if(n&)r=(r*rt[f][m])%M;
- • m++;
- • n>>=;}
- •return r;}
- •
- •int cal(int n){
- •int r1,r2;
- • r1=FPow(,n);
- • r2=((FPow(,n/)*et[n%])%M+M)%M;
- • return ((r1+r2)*)%M;
- • }
- •int main(){
- •int n,i;
- • rt[][]=;rt[][]=;
- • for(i=;i<;++i){
- • rt[][i]=(rt[][i-]*rt[][i-])%M;
- • rt[][i]=(rt[][i-]*rt[][i-])%M;}
- •while(scanf("%d",&n)!=EOF&&n>)
- •printf("%d\n",cal(n));
- •return ;}
STZG的代码
L The Digits String(没有写完,有空补)的更多相关文章
- HDU 4640 状态压缩DP 未写完
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 解题思路: 首先用一个简单的2^n*n的dp可以求出一个人访问一个给定状态的最小花费,因为这i个 ...
- 不写完不让回家的JQuery的事件与动画
在这看不见太阳的小黑屋里,苦逼的一天又开始了 好了闲话我也就不扯了,接下来我就来说说我对jQuery事件和动画的理解吧!!! 还是得再扯两句,我们敬爱的,Y老师讲完了,jQuery事件和动画,对着我们 ...
- 刚写完的商城erp + 这个商城前台,新鲜出炉。自己1个人写, 包括php框架和前端html页面.
刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面. 刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面.
- Scrum:The Definition of Done —— 作业有没有写完呢?
Scrum:The Definition of Done -- 作业有没有写完呢?_苗得雨_新浪博客 http://blog.sina.com.cn/s/blog_59450ffc0102eiai.h ...
- 用putty玩linux的时候由于以前用window 习惯写完东西按一下ctrl+s 保存
问题描述:用putty玩linux的时候由于以前用window 习惯写完东西按一下ctrl+s 保存,但是在putty一按下就不能再输入了.后来查找到:ctrl+s 是putty的一个命令大概是这样子 ...
- Word 双栏排版最后多一页空白页删不掉、左栏文字没写完就到右栏了
1. 问题 问题:Word双栏排版,最后多一页空白页,删不掉.如图: 原因分析:删不掉是因为末尾文字处其实有个下一页分节符,只不过可能看不到. 如何清晰的看到? 视图 > 大纲,就可以看到了.如 ...
- String的源码理解(未写完)
String本质上是一个char数组(jdk 9之后是byte数组),并且是一个声明为final的数组,并且String的不可变也是通过这种把数组声明为final来实现的 public final c ...
- QBXT Day2主要是数据结构(没写完先占坑)
简单数据结构 本节课可能用到的一些复杂度: O(log n). 1/1+1/1/.....1/N+O(n log n) 在我们初学OI的时候,总会遇到这么一道题. 给出N次操作,每次加入一个数,或者询 ...
- 写完代码就去吃饺子|The 10th Henan Polytechnic University Programming Contest
河南理工大学第十届校赛 很久没有组队打比赛了,好吧应该说很久没有写题了, 三个人一起玩果然比一个人玩有趣多了... 前100分钟过了4题,中途挂机100分钟也不知道什么原因,可能是因为到饭点太饿了?, ...
随机推荐
- jvm监控和诊断工具
大牛写的Java的OOM Killer:https://www.jianshu.com/p/4645254be259 强烈推荐 总的参考链接:https://cloud.tencent.com/dev ...
- 关于discuz论坛邮箱配置
Discuz后台可以进行邮件设置,实现网站自动发送邮件给用户的邮箱. 在Discuz邮件设置,经常使用25端口普通发送邮件.为了数据安全,我们也可以使用SSL加密发送,设置方法很简单,只需按照下图进行 ...
- tailf 跟踪日志文件
1.命令功能 tailf 跟踪日志文件增长,作用跟tail –f相同.tailf将输出文件的最后10行,然后等待文件增长. 2.语法格式 tailf option file 参数说明 参数 参数说 ...
- 第五周作业—N42-虚怀若谷
一.查找/etc目录下大于1M且类型为普通文件的所有文件 [root@centos7 ~]# find /etc -type f -size +1M -exec ls -lh {} \; -r--r- ...
- spring boot构建
1.新建Maven工程 1.File-->new-->project-->maven project 2.webapp 3.工程名称 k3 2.Maven 三个常用命令 选 项目右击 ...
- CocoaPods进阶:本地包管理
http://www.iwangke.me/2013/04/18/advanced-cocoapods/ 粉笔网的iOS工程师唐巧曾经写过一篇blog<使用CocoaPods来做iOS程序的包依 ...
- DHCP服务器怎么设置怎么启动
DHCP:动态主机配置协议,服务器用于为网络中的客户端自动分配IP地址.这种方法避免了由于手动配置IP地址导致的IP地址冲突问题,同时也减少了网络管理员的工作量. 工具/原料 在配置DHCP服务器时, ...
- POI 单元格类型CellType
1.单元格类型 单元格的内容决定了单元格的类型,POI中定义的7种单元格类型: 2.示例 cell_0.setCellType(CellType.STRING);//字符串 日期数据对应的单元格类型是 ...
- C#连redis
引入 Microsoft.Extensions.Caching.Redis其实就是封装了StackExchange.redis 控制台例子: class Program { public static ...
- Integer自动装箱和拆箱
Integer a=3; => Integer a=Integer.valueOf(3); /** *@description: 自动装箱和拆箱 *@auther: yangsj *@ ...