CodeForces 595B Pasha and Phone
2016-06-01 10:31
597 查看
CodeForces 595B Pasha and Phone
Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64uDescription
Pasha has recently bought a new phone jPager and started adding his friends’ phone numbers there. Each phone number consists of exactly n digits.Also Pasha has a number k and two sequences of length n / k (n is divisible by k) a1, a2, ...,an / k and b1,b2, ...,bn / k. Let’s split the phone number into blocks of length k. The first block will be formed by digits from the phone number that are on positions 1, 2,…, k, the second block will be formed by digits from the phone number that are on positions k + 1, k + 2, …, 2·k and so on. Pasha considers a phone number good, if the i-th block doesn’t start from the digit bi and is divisible by ai if represented as an integer.
To represent the block of length k as an integer, let’s write it out as a sequence c1, c2,…,ck. Then the integer is calculated as the result of the expression c1⋅10k−1+c2⋅10k−2+…ck.
Pasha asks you to calculate the number of good phone numbers of length n, for the given k, ai and bi. As this number can be too big, print it modulo 109+7.
Input
The first line of the input contains two integers n and k (1 ≤ n ≤ 100 000, 1 ≤ k ≤ min(n, 9)) — the length of all phone numbers and the length of each block, respectively. It is guaranteed that n is divisible by k.The second line of the input contains n / k space-separated positive integers — sequence a1, a2, ...,an / k (1 ≤ ai< 10k).
The third line of the input contains n / k space-separated positive integers — sequence b1,b2, ...,bn / k (0 ≤bi ≤ 9).
Output
Print a single integer — the number of good phone numbers of length n modulo 109+7.Sample Input
Input
6 238 56 49
7 3 4
Output
8Input
8 21 22 3 44
5 4 3 2
Output
32400Hint
In the first test sample good phone numbers are: 000000, 000098, 005600, 005698, 380000, 380098, 385600, 385698链接在这: 题目链接
题意:求n位且满足以下两点的号码数量
把号码分成k份(可能以0开头)
1. 第i份是ai的倍数;
2. 第i份不能是以bi开头的数;
按份for循环找一遍,再取模相乘
注意讨论bi是否为0,pow有误差。
代码:
#include<stdio.h> #define mod 1000000007 int a[100005]; int b[100005]; int ans[100005]; long long mypow(int a,int b) { long long ans=1; for(int i=0; i<b; i++) ans*=10; return ans; } int main() { int n,k; while(~scanf("%d %d",&n,&k)) { for(int i=0; i<n/k; i++) scanf("%d",&a[i]); for(int i=0; i<n/k; i++) scanf("%d",&b[i]); for(int i=0; i<n/k; i++) { if(b[i]==0) { ans[i]+=((mypow(10,k)-1)/a[i])+1; ans[i]-=(mypow(10,k-1)-1)/a[i]+1; } else { ans[i]+=((mypow(10,k)-1)/a[i])+1; ans[i]-=(mypow(10,k-1)*(b[i]+1)-1)/a[i]-(mypow(10,k-1)*(b[i])-1)/a[i]; } } long long ans2=1; for(int i=0; i<n/k; i++) { ans2*=ans[i]; ans2%=mod; } printf("%lld\n",ans2); } return 0; }
相关文章推荐
- 简单的四则运算
- 数的奇偶性
- ACMer博客瀑布流分析
- ACM程序设计大赛题目分类
- 计算字符串最后一个单词长度
- ACM网址
- 1272 小希的迷宫
- 1272 小希的迷宫
- hdu 1250 大数相加并用数组储存
- 矩阵的乘法操作
- 蚂蚁爬行问题
- 蚂蚁爬行问题
- 求两个数的最大公约数【ACM基础题】
- 打印出二进制中所有1的位置
- 杭电题目---一只小蜜蜂
- HDOJ 1002 A + B Problem II (Big Numbers Addition)
- 初学ACM - 半数集(Half Set)问题 NOJ 1010 / FOJ 1207
- 初学ACM - 组合数学基础题目PKU 1833
- POJ ACM 1002
- POJ 2635 The Embarrassed Cryptographe