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分钟也不知道什么原因,可能是因为到饭点太饿了?, ...
随机推荐
- mysql 乐观锁、悲观锁、共享锁,排它锁
mysql锁机制分为表级锁和行级锁,本文就和大家分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流. 共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能 ...
- 前端每日实战:98# 视频演示如何用纯 CSS 创作一只愤怒小鸟中的绿猪
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/VBGWqX 可交互视频 此视频是可 ...
- html中的点击事件
使用点击事件写一个计数器. onmouseup : 当鼠标按下,松开的时候触发事件. onmousedown: 当鼠标按下的时候触发事件.onMouseOver: 鼠标经过时触发 onMouseOut ...
- codeforces_D. Treasure Hunting_[DP+Binary Search]
http://codeforces.com/contest/1201/problem/D 题意:n行m列的矩阵中,有k个targets,从[1, 1]出发,每次只能向上下左右四个方向移动一步,且只有在 ...
- [NOIP2016]蚯蚓 题解
题目描述 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」= [3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. ...
- 如何把vue.js项目部署到服务器上
如何把vue.js项目部署到服务器上面,我用的是tomcat服务器 1-改一下config/index.js文件,如下图,把assetsPublicPath: './', productionSour ...
- h5分线程Worker
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>Ti ...
- HDU 5632 Rikka with Array [想法题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5632 ------------------------------------------------ ...
- 136、TensorFlow的Embedding lookup
import tensorflow as tf; import numpy as np; c = np.random.random([10, 1]) b = tf.nn.embedding_looku ...
- linux使用apache发布静态html网页
环境 centOS7+httpd 安装httpd 安装 #检查是否安装和httpd rpm -qa | grep httpd #如果没安装 yum -y install httpd 启动httpd并验 ...