在群里看到的一道题,觉得有趣,就随手写下来了。
#include <iostream>
//tdw
using namespace std;
int main()
{
int n;//天数
cin >> n;
int* pA = new int[n];//蔬菜数量
memset(pA, 0, n);
int* pB = new int[n];//价格
memset(pB, 0, n);
int index = 0;
while (index < n)
{
cin >> pA[index++];
}
index = 0;
while (index < n)
{
cin >> pB[index++];
}
bool* pSell = new bool[n];//每天是否卖出
memset(pSell, 0, n);
int b = pB[n - 1];//蔬菜的卖出价格,在某一天的真实表现数值(扣除电费)
pSell[n - 1] = true;
for (int i = n - 2; i >= 0; --i)
{
if (pB[i] < b - 1)//如果要想跟例子完全一致用"<=",但是我觉得当天能卖绝不留在第二天,落袋为安
{//当天蔬菜不卖出,更新这一天的价格为卖出价格在这一天的具体表现数值 b = b-1
pSell[i] = false;
b = b - 1;
}
else
{//卖出当天以及当天之前剩余的蔬菜
pSell[i] = true;
b = pB[i];
}
}
long long int sum = 0;
long long int num = 0;
for (int i = 0; i < n; ++i)
{
if (pSell[i])
{//卖出
sum += (num + pA[i]) * pB[i];
num = 0;
}
else
{//不卖出,累计蔬菜数量,扣除当天电费
num += pA[i];
sum -= num;
}
}
cout << sum;
delete[] pSell;
delete[] pA;
delete[] pB;
return 0;
}