专栏文章

题解:P12987 [GCJ 2022 #1B] Pancake Deque

P12987题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miowunf4
此快照首次捕获于
2025/12/03 02:27
3 个月前
此快照最后确认于
2025/12/03 02:27
3 个月前
查看原文

题目大意:

双端队列deque 讲解)的方式供应煎饼,每个煎饼有一个美味值,只有当一个煎饼的美味值不低于之前所有顾客获得的煎饼的美味值时,该顾客才需要为其煎饼付费。求最大化付费顾客的数量。

思路:

想要最大化付费顾客数量,每一次取的煎饼的美味值就需要最小,取队首和队尾的最小值,然后与前几次选择的煎饼的最大美味值进行比较,如果不小于,那么就要付费。

代码:

CPP
#include<bits/stdc++.h>
using namespace std;
deque<int> d;
int main(){
	int T;
	scanf("%d",&T);
	for(int i=1;i<=T;i++){
		while(!d.empty()){ // 清空队列。
			d.pop_back();
		}
		int n,sum=0;
		int maxx=0; // 当前最大美味值。
		scanf("%d",&n);
		for(int j=0;j<n;j++){
			int x;
			scanf("%d",&x);
			d.push_back(x);
		}
		while(!d.empty()){
			int f=d.front();
			int b=d.back();
			if(f<b){ // 队首小。
				if(maxx<=f){
					maxx=f;
					sum++;
				}
				d.pop_front();
			}
			else{ // 队尾小。
				if(maxx<=b){
					maxx=b;
					sum++;
				}
				d.pop_back();
			}
		}
		printf("Case #%d: %d\n",i,sum);
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...