Codeforces Round #253 DIV1 C 馋

http://codeforces.com/contest/442/problem/C

题意非常easy,基本上肯定有坑坑洼洼的样子。看题目案例,从第三个跟第二个没有凹的案例来看的话,多写几个以及多画画过程略微推一下就会发现。除了最大的两个数以外都能够得到,然后就是凹的情况了,凹的情况肯定是唯一的,把中间的数除去得到一个值。可是凹凸有结合该怎么办。猜一把先把凹的单独一个个给攻克了,产生没有凹的序列再处理。然后刚好对于第一个案例进行測试,发现答案正确,于是就这么贪心的敲了一个

对于凹的情况 能够使用栈来处理,处理完对于没有凹的情况直接排序 除了最大的两个数以外其他 能够都取了  


#include<iostream>
#include<cstdio>
#include<list>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<cmath>
#include<memory.h>
#include<set>

#define ll long long

#define eps 1e-8

const int inf = 0xfffffff;

const ll INF = 1ll<<61;

using namespace std;

//vector<pair<int,int> > G;
//typedef pair<int,int > P;
//vector<pair<int,int> > ::iterator iter;
//
//map<ll,int >mp;
//map<ll,int >::iterator p;
int n;
int num[1000000 + 5];

stack<int >	s;

ll ans; 

void init() {
	memset(num,0,sizeof(num));
	while(!s.empty())s.pop();
	ans = 0ll;
}

bool input() {
	while(scanf("%d",&n) == 1) {
		for(int i=0;i<n;i++)
			scanf("%d",&num[i]);
		return false;
	}
	return  true;
}

void cal() {
	bool flag = false;
	s.push(num[0]);
	for(int i=1;i<n;i++) {
		if(num[i] <= s.top()) {s.push(num[i]);flag = true;continue;}
		if(num[i] >= s.top() && flag) {
			s.pop();
			ans += min(num[i],s.top());
			if(num[i] <= s.top())flag = true;
			else  {
				while(true) {
					int tmp = s.top();
					s.pop();
					if(s.empty()) {
						s.push(tmp);
						break;
					}
					if(tmp > s.top() || num[i] < tmp) {
						s.push(tmp);
						break;
					}
					if(num[i] >= tmp)ans += min(s.top(),num[i]);
				}
			}
			if(num[i] <= s.top())flag = true;
			else flag = false;
			s.push(num[i]);
			continue;
		}
		s.push(num[i]);
	}
	memset(num,0,sizeof(num));
	int cnt = 0;
	while(!s.empty()) {
		num[cnt++] = s.top();
		s.pop();
	}
	sort(num,num+cnt);
	for(int i=0;i<cnt-2;i++)
		ans += num[i];
}

void output() {
	printf("%I64d
",ans);
}

int main() {
	while(true) {
		init();
		if(input())return 0;
		cal();
		output();
	} 
}


版权声明:本文博主原创文章,博客,未经同意不得转载。

原文地址:https://www.cnblogs.com/blfshiye/p/4916730.html