jzoj:【綜合測試4】摘蘋果(apple)

題外話

蒟蒻一枚…(坐在馬桶上都能看懂的題解)

穿越

這一道題難度還行吧,至少沒有普及提高那麼難(QwQ)
在這裏,吾放一下樣例

樣例輸入1
3 2
5 3 6
4 6

樣例輸出1
11


樣例輸入2
3 3
4 2 3
3 3 4

樣例輸出2
Bad luck

難度:⭐⭐

方法:很多

數據範圍限制

對於100%的數據,1<=N,M<=1000,1<=Hi,Pi<=1000。

法一:暴力判斷 (分數20分左右)

時間複雜度:O(n)

#include<bits/stdc++.h>
using namespace std;
int flag,a[10000],b[10000];
int main()
{
	int n,m,sum=0;
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=m;i++) cin>>b[i];
	for(int i=1;i<=n;i++)
		if(a[i]>=b[i]&&b[i]-a[i]<a[i])
			sum=sum+a[i];
		else
			cout<<"Bad luck"<<endl,flag=1;
	if(!flag) cout<<sum;
	return 0;
}

這只是個初步的大小判斷,其實這個代碼改一改是差不多能AC的,因爲數據太水了…

在這裏插入圖片描述

法二:暴力判斷的升級

上面的那一個代碼sort一下,再多一層for循環判斷,也許這一道題 基本就AC了

代碼:


......不顯示了吧......

法三:進階(AC)其實也有O(n*m)的,就是不sort的,不過不想講了…

時間複雜度:O(n+m)
輸入、排序和上面的一樣。

  • 輸入
  • 排序、從小到大排
  • 外層一個1~m的循環,一個個找
  • 裏面一個1~n的循環,一個個匹配
  • 判斷跳的高度是否比蘋果高度高,如果高的話就是最優解(請讀者想一想爲什麼),否則繼續
  • 如果找到一個高點了要標記一下,下一次就用這個點的下一個點來找(想想有何用意吧)
  • 摘下的蘋果數加一,爲的是等一下看有沒有全部摘下來
  • 找到了一個高點後直接break,因爲每個點只需一個小朋友摘就行
  • 輸出
  • 結束

給個關鍵的圖吧

在這裏插入圖片描述

也許你們會問:上面那個方法不已經行了嘛,搞這麼多幹嘛?

首先:上面那個存在風險,容易錯

第二:我們來看一看這一道題:

穿梭於知識的海洋之中

沒啥變化啊?

關鍵看這個:

上題:
在這裏插入圖片描述
這題:
在這裏插入圖片描述

. . . . . . . . . . . . . . . . . . . 華麗的分界線 . . . . . . . . . . . . . . . . . . . . .

OK,這一次就先講到這裏了,有問題私聊吧!

(如果對你有好處,請點個贊,謝謝)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章