1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#define _CRT_SECURE_NO_WARNINGS
// zapiekanka Potyczki Algorytmiczne 2017 zadanie 2b
#include <cstdio>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <vector>

typedef long long lLong;
typedef unsigned long uLong;
typedef unsigned long long ulLong;
typedef unsigned int uInt;
typedef unsigned char Byte;

using namespace std;

#define FOR(x, b, e) for(int x=b; x<=(e); ++x)
#define ALL(i) (i).begin(), (i).end()
#define CONTAINS(i,v) (find(ALL(i),v)!=(i).end())
typedef vector<bool> bit_vector;
typedef vector<int> int_vector;
typedef vector<uInt> VI;
typedef vector<ulLong> VLL;


class PrzypadekTestowy
{
private:
	uInt _n, _m;
	FILE *_input;
	VLL _t; //czasy przybycia kolejnych klientow

	inline void Reset()
	{
	}

	inline void WczytajInt(int *value)
	{
		fscanf(_input, "%d\n", value);
	}

	inline void WczytajlLong(lLong *value)
	{
		fscanf(_input, "%lld", value);
	}

	inline void WczytajParelLong(lLong *value1, lLong *value2)
	{
		fscanf(_input, "%lld %lld\n", value1, value2);
	}
	inline void WczytajulLong(ulLong *value1)
	{
		fscanf(_input, "%llu", value1);
	}

	inline void WczytajPareInt(uInt *value1, uInt *value2)
	{
		fscanf(_input, "%d %d\n", value1, value2);
	}

public:
	PrzypadekTestowy() :_input(stdin)
	{
	}
	PrzypadekTestowy(FILE *input)
	{
		_input = input;
	}

	inline void Wykonaj()
	{
		Reset();
		WczytajPrzypadekTestowy();
	}
	inline void WczytajCzasyPrzyjscia()
	{
		_t.reserve(_n);
		ulLong t;
		// wczytaj czasy pryzjscia
		for (uInt i = 0; i < _n; i++)
		{
			WczytajulLong(&t);
			_t.push_back(t);
		}
	}
	inline void WczytajPiekarnikiIRozwiaz()
	{
		for (uInt i = 0; i < _m; i++)
		{
			int mi;
			ulLong dSum = 0; //sumaryczne oczekiwanie klientow
			ulLong pos = 0;
			WczytajInt(&mi);

			for (auto t : _t)
			{
				pos += mi; //ustaw pozycje upieczenia
				if (pos <= t) pos = t; //przestawiamy pozycje, klient nie czekal
				else dSum += (pos - t);
			}		
			printf("%llu\n", dSum);
		}		
	}
	inline void WczytajPrzypadekTestowy()
	{
		WczytajPareInt(&_n, &_m); //liczba iliknetow, liczba piekarnikow
		WczytajCzasyPrzyjscia();
		WczytajPiekarnikiIRozwiaz();
	}
};

int main(int argc, char **argv)
{
	FILE *in = stdin;
	if (argc>1)
	{
		in = fopen(argv[1], "rt");
		if (NULL == in)
		{
			in = stdin;
		}
	}

	PrzypadekTestowy *p = new PrzypadekTestowy(in);
	p->Wykonaj();
	fclose(in);
	delete(p);
	return 0;
}