ALDS1_3_D:Areas on the Cross-Section Diagram

题目链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_3_D

输入:\/和_

输出:积水总面积和每个水坑的面积

 

_可以无视,读入数据时:
\ 压入栈中
/ 检查栈中有没有\,如果有,差值就是面积,加起来

建一个栈,用于存水坑,一个配对的坑\/就把这个坑的积水面积存进去,存下每个的面积和起始坐标

下一个坑如果它的起始\比前一个坑的小,则合并这两个坑。

#include 
#include 
#include 
#include 
#include 
using namespace std;

int main (){
	char s;
	stack A;
	stack > B;
	int i=0,j,ans=0,a;
	while(cin>>s){
		if(s=='\\') A.push(i);
		else if(s=='/'&&!A.empty()){
			j=A.top();A.pop();
			a=i-j;
			ans+=a;
			while(!B.empty() && B.top().first>j){
				a=a+B.top().second;
				B.pop();
			}
			B.push(make_pair(j, a));
		} 
		i++;
	}
	cout< X;
	int z;
	z=B.size();
	for(int i =0;i=0;i--){
		cout<<" "<

错点:

1.输出时,限制条件尽量都不要写B.size()这种形式,因为它随着容器的变化在变化,应该先建立一个变量做限制条件,比如

z=B.size();

for(int i =0;i

以后写循环限制条件时,尽量不要选一个随着循环内内容变化的量做限制条件,可以先传给另一个变量,再限制。
 

你可能感兴趣的:(挑战程序设计竞赛2,算法与数据结构,挑战程序设计竞赛2,算法与数据结构,笔记)