PAT(甲級)2020年秋季考試 7-1 Panda and PP Milk (20分)

baixiaofei567發表於2020-12-01

在這裡插入圖片描述
畫圖+建模,從左往右遍歷,找後面有幾個連續遞減的,相等的就不算,直到找到下一個比當前的大的。記錄有幾個連續遞減的,那麼當前位就是比200大幾個100,因為最後的那一位就是200。然後從右往左也是這樣。最後取較大值,因為我們要保證從左往右or從右往左都不會產生矛盾

//判斷當前位有幾個連續遞減的,碰到遞增的就break,碰到相等的不要++,最後一個設為200
//每次比前一位少100,如果和前一位相等,就賦值為一樣
 #include<iostream>
 #include<vector>
 #include<cmath>
 using namespace std;
 int main(){
 	int n;
 	cin>>n;
 	vector<int> weight(n+1);
 	vector<int> milk(n+1);
 	for(int i = 0; i < n; i++){
 		cin>>weight[i];
	 }
	 int cnt = 0;
	 for(int i = 0; i < n; i++){
	 	cnt = 0;
	 	for(int j = i; j < n-1; j++){
	 		if(weight[j] > weight[j+1]){
	 			cnt++;
			 }
			 else if(weight[j] < weight[j+1]){
			 	break;
			 }
		 }
		 milk[i] = cnt*100 + 200;
	 }
	 for(int i = n-1; i >= 0; i--){
	 	cnt = 0;
	 	for(int j = i; j > 0; j--){
	 		if(weight[j] > weight[j-1]){
	 			cnt++;
			 }
			 else if(weight[j] < weight[j+1]) break;
		 }
		 milk[i] = max(cnt*100+200,milk[i]);
	 }
	 if(weight[n-1] > weight[n-2]) milk[n-1] = milk[n-2]+100;
	 int sum = 0;
	 for(int i = 0; i < n; i++){
	 	sum += milk[i];
	 	cout<<milk[i]<<endl;
	 }
	 cout<<sum;
	 return 0;
 } 

相關文章