70pts WA求助
查看原帖
70pts WA求助
943891
Yuskai楼主2023/11/23 17:33
#include <bits/stdc++.h>
using namespace std;

long long dis[100005], val[100005], st[100005];

int main()
{
	//freopen("road.in","r",stdin);
	//freopen("road.out","w",stdout);
	long long n, d, ans = 0, liu;
	cin >> n >> d;
	for(int i = 1; i <= n - 1; i++) cin >> dis[i];
	for(int i = 1; i <= n; i++) cin >> val[i];
	for(int i = 1; i <= n - 1; i++)
	{
		st[i] = st[i - 1] + dis[i];
		//cout << st[i] << ' ';
	}
	long long car = 1;
	while(1)
	{
		if(car == n) break;
		if(car == 1)
		{
			bool flag = false;
			long long index = 0;
			for(int i = 2; i <= n; i++)
			{
				if(val[i] < val[1])
				{
					flag = true;
					index = i;
					break; 
				}
			}
			if(flag == false)
			{
				long long oil = st[n - 1] / d;
				if(st[n - 1] % d != 0) oil++;
				//cout << oil * val[1];
				return 0;
			}
			else
			{
				long long oil2 = st[index - 1] / d;
				if((st[index - 1] % d - liu) != 0) oil2++;
				if((st[index - 1] % d - liu) != 0) liu = d - ((st[index - 1] - liu) % d);
				else liu = 0;
				//cout << liu << endl;
				ans += oil2 * val[1];
				//cout << ans << ' ' << index << ' ' << val[car] << ' ' << oil2 << endl;
			}
			car = index;
		}
		else
		{
			long long flag2 = -1;
			for(int i = car + 1; i <= n - 1; i++)
			{
				if(val[i] < val[car])
				{
					flag2 = i;
					break;
				}
			}
			if(flag2 == -1)
			{
				long long oil3 = (st[n - 1] - st[car - 1] - liu) / d;
				if((st[n - 1] - st[car - 1] - liu) % d != 0)
				{
					oil3++;
				}
				if((st[n - 1] - st[car - 1] - liu) % d != 0) liu = d - ((st[n - 1] - st[car - 1] - liu) % d);
				else liu = 0;
				ans += oil3 * val[car];
				//cout << ans << ' ' << n << ' ' << val[car] << ' ' << oil3 << ' ' << liu << endl;
				car = n;
			}
			else
			{
				long long oil4 = (st[flag2 - 1] - st[car - 1] - liu) / d;
				if((st[flag2 - 1] - st[car - 1] - liu) % d != 0)
				{
					oil4++;
				}
				if((st[flag2 - 1] - st[car - 1] - liu) % d != 0) liu = d - ((st[flag2 - 1] - st[car - 1] - liu) % d);
				else liu = 0;
				ans += oil4 * val[car];
				//cout << ans << ' ' << flag2 << ' ' << val[car] << ' ' << oil4 << ' ' << liu << endl;
				car = flag2;
			}
		}
	}
	cout << ans;
	return 0;
}
2023/11/23 17:33
加载中...