【題意簡述】:輸入的k和p,k表示有幾個字母,也就是輸入有幾行,p表示每個字母有幾個,是以坐標的形式出現的(x,y).現在讓我們將相同的字母劃分在一個矩形塊中,問能否實現。
【分析】:唉,低級失誤!!!記住!積累!
/* Date: 2014/11/04 Time: 21:38 By : VID Attention: 坐標的建立是理解這個問題,梳理思路的關鍵。 我的坐標系是x軸指向右,y軸指向下,就像題中的圖一樣! */ // 228K 0ms #includeusing namespace std; #define Max(x,y) ((x)>(y)?(x):(y)) #define Min(x,y) ((x)<(y)?(x):(y)) #define Inf 1000000000 int lef[27],righ[27],up[27],under[27]; bool check(int n) { for(int i = 0;i =lef[i]&&lef[j]<=righ[i]) || (righ[j]<=righ[i]&&righ[j]>=lef[i])) &&((up[j]>=up[i]&&up[j]<=under[i]) || (under[j]<=under[i]&&under[j]>=up[i]))) return 0; } } return 1; } int main() { int t,k,p; int x,y; cin>>t; while(t--) { cin>>k>>p; for(int i = 0;i >x>>y; ll = Min(ll,x),rr = Max(rr,x),uup = Min(uup,y),un = Max(un,y); } lef[i] = ll,righ[i] = rr,up[i] = uup,under[i] = un; } for(int i = 0;i lef[j] && lef[i] lef[j]) righ[i] = righ[j]; if(up[i] > up[j] && up[i] < under[j]) up[i] = up[j]; if(under[i] < under[j]&& under[i]>up[j]) under[i] = under[j]; } } if(check(k)) cout<<"YES"<