13458試験監督



質問リンク

👍 に答える


最初にwhileゲートを全て外す方式を使い、O(N^2)でタイムアウト.
だから数学の上で更に考えてみると、Cに分ける時、分によって少し加えればいいので、まだ残っているものがあれば、+1を加えれば終わりです.
ちなみに、A、B、Cは全部で100万に達し、int型の範囲を超えています
すなわち、出力値cntはlonglong型と宣言すべきである.

コード#コード#

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int N, B, C;
vector<int> abc;
int main() {
	cin >> N;
	for (int i = 0; i < N; i++) {
		int bc;
		cin >> bc;
		abc.push_back(bc);
	}
	cin >> B >> C;

	long long cnt = 0;
	for (int i = 0; i < N; i++) {
		cnt++;
		abc[i] -= B;
		if (abc[i] > 0) {
			cnt+=abc[i] / C;
			if (abc[i]%C > 0) {
				cnt++;
			}
		}

	}
	cout << cnt;
	return 0;
}