# Greedy# Iteration

j352 - 開心農場 (Farm)

🔗 前往 ZeroJudge 原題

題目描述

題目描述一個農場,農場有 n 個田地,每個田地有兩種作物產量。給定目標產量 x 和 y,要求找到最早的田地索引,使得累積產量分別達到或超過 x 和 y。如果無法達到目標產量,輸出 -1。最終輸出兩個田地索引的最大值加 1。

解題思路

這題使用貪心策略。分別對兩種作物進行迭代,計算累積產量,直到累積產量達到或超過目標產量。記錄下達到目標產量的田地索引。如果任何一種作物都無法達到目標產量,則輸出 -1。否則,輸出兩個田地索引的最大值加 1。

複雜度分析

  • 時間複雜度: O(n)
  • 空間複雜度: O(1)

程式碼

#include <iostream>
using namespace std;
int n,a[105][2],x,y,sx,sy,ansx=-1,ansy=-1;
int main(){
	cin >> n;
	for(int j=0;j<2;++j)
		for(int i=1;i<=n;++i)
			cin >> a[i][j];
	cin >> x >> y;
	for(int i=1;i<=n;++i){
		sx+=a[i][0];
		if(sx>=x){
			ansx=i;
			break;
		}
	}
	for(int i=1;i<=n;++i){
		sy+=a[i][1];
		if(sy>=y){
			ansy=i;
			break;
		}
	}
	if(ansx==-1||ansy==-1){
		cout << "-1";
		return 0;
	}
	else{
		cout << max(ansx+1,ansy+1);
	}
}

Discussion