1079. Total Sales of Supply Chain (25)

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

#define N 100000

inline double rate(int i, double rr[], double r) {
	if(!rr[i]) {
		int j = i;
		for(; !rr[j]; j --) ;
		for(j ++; j <= i; j ++) {
			rr[j] = rr[j-1] * (1.0+r/100.0);
		}
	}
	return rr[i];
}

inline int exp(int i, int rid[], int expo[]) {
	if(expo[i] || i == 0)
		return expo[i];
	else {
		expo[i] = exp(rid[i], rid, expo) + 1;
		return expo[i];
	}
}

double rr[N] = {};
int rid[N] = {};
double retailer[N] = {};
int expo[N] = {};

int main(int argc, char **argv) {

	int n;
	double p, r;
	scanf("%d%lf%lf", &n, &p, &r);

	for(int i = 0; i < n; i ++) {
		int m;
		scanf("%d", &m);
		if(!m) {
			scanf("%lf", &retailer[i]);
		}
		else {
			for(int j = 0; j < m; j ++) {
				int c;
				scanf("%d", &c);
				rid[c] = i;
			}
		}
	}

	rr[0] = 1.0;

	double sale = 0;
	for(int i = 0; i < n; i ++) {
		if(retailer[i]) {
			sale += retailer[i]*p*rate(exp(i, rid, expo), rr, r);
		}
	}

	printf("%.1lf\n", sale);

	return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值