題目鏈接:http://poj.org/problem?id=2269
題意:給出集合的表達式,在已經知道幾種運算規則的情況下求表達式值。
棧的運用:
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #define M 256 class CSet{ bool set[26]; public: CSet(){memset(set,0,sizeof(set));} CSet(bool _set[]){ memmove(set,_set,sizeof(bool)*26); } void Clr(){ memset(set,false,sizeof(bool)*26); } void Set(bool _set[]){ memmove(set,_set,sizeof(bool)*26); } CSet operator + (const CSet &tmp){ bool _set[26]; short i; for(i=0;i<26;i++) _set[i]=tmp.set[i]|set[i]; return CSet(_set); } CSet operator - (const CSet &tmp){ bool _set[26]; short i; for(i=0;i<26;i++) _set[i]=set[i]?tmp.set[i]? false:true:false; return CSet(_set); } CSet operator * (const CSet &tmp){ bool _set[26]; short i; for(i=0;i<26;i++) _set[i]=tmp.set[i]&set[i]; return CSet(_set); } void Put(){ short i; putchar('{'); for(i=0;i<26;i++) if(set[i]) putchar(i+'A'); puts("}"); } }; char s[M]; CSet stkn[M]; char stko[M]; int topn,topo; void Work(char *p) { CSet a,b; bool tmp[26]; char op; topn=topo=0; while(*p){ switch(*p){ case '{': memset(tmp,false,sizeof(tmp)); while(isalpha(*(++p))) tmp[*p-'A']=true; stkn[topn++].Set(tmp); break; case '(':stko[topo++]=*p;break; case ')': while(topo&&stko[topo-1]!='('){ op=stko[--topo];a=stkn[--topn];b=stkn[--topn]; stkn[topn++]=op=='+'?a+b:op=='-'?b-a:a*b; }if(stko[topo-1]=='(') topo--; break; case '+':case '-': while(topo&&stko[topo-1]!='('){ op=stko[--topo];a=stkn[--topn];b=stkn[--topn]; stkn[topn++]=op=='+'?a+b:op=='-'?b-a:a*b; }stko[topo++]=*p;break; case '*':stko[topo++]=*p;break; } p++; } while(topo){ a=stkn[--topn];b=stkn[--topn];op=stko[--topo]; stkn[topn++]=op=='+'?a+b:op=='-'?b-a:a*b; } } int main() { //freopen("friends1.in","r",stdin); while(~scanf("%s",s)){ //puts(s); Work(s); stkn[0].Put(); } return 0; }
好吧,趁熱打鐵,今天寫了整天的Dancing Links,不過還老是出現種種錯誤~其中竟因爲一個變量把整個十字鏈表給寫成了一條長長的鏈了,竟然還能通過樣例,TLE了好久才 發現~ 三題中3372就是個模板題,不過是後來才發現有這麼一個
題目鏈接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3372 題意:給出一個矩形區域和一些固定位置的矩形,問從這些矩形中最少選取多少個可以完全覆蓋整個區域,並
題目鏈接:http://poj.org/problem?id=1177 題意:給出多個矩形,求這些矩形所覆蓋圖形的周長。 可用線段樹來做,兩種方法: 1、分別對x和y方向離散化後做線段樹,求出各方向上的輪廓長; 2、對一個方向上的