Description
给出数列A1,A2 ,...,AN,并设
现要求把所有的Bi 算出来。
Input
输入包含多组测试数据。对于每组数据,第 1 行,1 个整数N(1 ≤N≤100,000), 表示数列的长度。第 2 行,N 个整数A1,A2,...,AN(1 ≤Ai≤109),表示给出的数列。输入以一个 0 表示结尾。
Output
对于每组数据,输出一行,N 个整数用空格分隔,表示算出的B1,B2,...,BN。
Sample Input
3
1 2 3
0
Sample Output
6 3 2
去年貌似做过 一直木有做出来过~~
今天在东哥的帮助下写到了
mod=1000000007
左扫一遍a[i]记录从1-i的乘机的mod
右扫一遍b[i]记录从n-i的乘机的mod
要计算 num[i]=a[i-1]*b[i+1]%mod
加减乘有mod操作
除是木有的这是要注意的。
感觉有点动归的思想
postcode:
#include<stdio.h>
#define mod 1000000007
long long a[110000];
long long b[110000];
long long num[110000];
int main()
{
int n;
while(scanf("%d",&n)&&(n!=0)){
int i;
for(i=1;i<=n;i++)
scanf("%lld",&num[i]);
a[0]=1;
b[n+1]=1;
for(i=1;i<=n;i++) //左扫
a[i]=a[i-1]*num[i]%mod;
for(i=n;i>=1;i--) //右扫
b[i]=b[i+1]*num[i]%mod;
for(i=1;i<=n;i++){ //去掉中间项
printf("%lld",a[i-1]*b[i+1]%mod);
if(i!=n)printf(" ");
}
printf("\n");
}
}