首页 > 代码库 > Codevs 3194 基因变异

Codevs 3194 基因变异

Codevs 3194 基因变异

 时间限制: 1 s
 空间限制: 32000 KB
 题目等级 : 黄金 Gold
题解
题目描述 Description

小毛终于来到了冥王星,这是一颗已经不属于行星的矮行星,它的表面温度低于-220度。在这里,小毛惊奇的发现,他带来的厌氧菌开始了基因变异,裂变的速度与光照时间(秒)成乘积关系,公式如下:细菌个数=原个数*时间(秒),而如果关闭照明,则细菌停止繁殖裂变。现在已知n个细菌,经过m段光照时间后,一共有多少个细菌呢?

输入描述 Input Description

第一行为两个整数N,M(均小于1000),第2行为m个时间段的时间(均小于10000)。

输出描述 Output Description

仅一个正整数,表示最后的细菌个数。

样例输入 Sample Input

4 3

100 20 3

样例输出 Sample Output

24000

数据范围及提示 Data Size & Hint

没必要啦

分类标签 Tags 点此展开 

容斥原理 数论
 
 严重怀疑标签的真实性~~ 明明是高精乘法
(⊙v⊙)嗯~ 代码:
#include<iostream>#include<cstdio>using namespace std;const int N = 100010;int n,m,x,lena,lenb;int a[N],b[N],c[N];int p;int main() {    cin>>n>>m;    int t = n;    while(t) {        b[++p] = t%10;        t/=10;    }    lenb = p,p = 0;    for(int k=1; k<=m; k++) {        cin>>x;        while(x) {            a[++p] = x%10;            x/=10;        }        lena = p,p=0;        for(int i=1; i<=lena; i++) {            x = 0;            for(int j=1; j<=lenb; j++) {                c[i+j-1] += a[i]*b[j]+x;                x = c[i+j-1]/10;                c[i+j-1]%=10;            }            c[i+lenb] = x;        }        int lenc = lena + lenb;        while(c[lenc]==0&&lenc>1)        lenc--;        lenb=lenc;        for(int i=1; i<=lenb; i++){            b[i] = c[i];            c[i] = 0;        }        }    for(int i=lenb; i>0; i--)        cout<<b[i];    return 0;}

 

自己选的路,跪着也要走完!!!

Codevs 3194 基因变异