#include #include using namespace std; const int MAX_COINS = 1 << 17; long coinValues[MAX_COINS]; long coinTypesCount, requiredSum; void readInput(){ ifstream in; long firstValue, multiplier; in.open("coins.in"); in >> coinTypesCount>>requiredSum; in >> firstValue; coinValues[0] = firstValue; for (int ind = 1; ind < coinTypesCount; ind++){ in >> multiplier; coinValues[ind] = coinValues[ind - 1]*multiplier; } in.close(); } long findBestCount(){ long remainingSum = requiredSum; int coinInd = coinTypesCount - 1; long selectedCoinsCount = 0, newCount; while (coinInd >= 0){ if (remainingSum == 0){ return selectedCoinsCount; } newCount = remainingSum / coinValues[coinInd]; selectedCoinsCount += newCount; remainingSum = remainingSum % coinValues[coinInd]; coinInd--; } return selectedCoinsCount + remainingSum; } int main(){ readInput(); ofstream out; out.open("coins.out"); long result = findBestCount(); out << result << endl; out.close(); return 0; }