zoukankan      html  css  js  c++  java
  • Aizu

    白书例题,直接用书上的暴力压缩坐标是可以的,但是看了别人的博客的写法,大概是理解了思想但是看不懂为什么那么压缩,先放这,等明白了补上

    #define debug
    #include<stdio.h>
    #include<math.h>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<string>
    #include<cstring>
    #include<string.h>
    #include<algorithm>
    #include<iostream>
    #include<vector>
    #include<functional>
    #include<iomanip>
    #include<map>
    #include<set>
    #define f first
    #define s second
    #define pb push_back
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> pii;
    typedef pair<ll,ll>PLL;
    typedef pair<int,ll>Pil;
    const ll INF = 0x3f3f3f3f;
    const double inf=1e8+100;
    const double eps=1e-8;
    const ll maxn =1e3+200;
    const int N = 1e4+10;
    const ll mod=1000007;
    //
    int dx[]= {0,1,-1,0};
    int dy[]= {1,0,0,-1};
    int fld[2*maxn][2*maxn];
    int X1[maxn],X2[maxn],Y1[maxn],Y2[maxn];
    int W,H,n;
    //
    int compress(int *x1,int *x2,int w) {
    	vector<int>xs;
    	//
    	for(int i=0; i<n; i++) {
    		int tx1=x1[i],tx2=x2[i];
    		if(1<=tx1&&tx1<w)
    			xs.push_back(tx1);
    		if(1<=tx2&&tx2<w)
    			xs.push_back(tx2);
    	}
    	xs.push_back(0);
    	xs.push_back(w);
    	sort(xs.begin(),xs.end());
    	xs.erase(unique(xs.begin(),xs.end()),xs.end());
    	for(int i=0; i<n; i++) {
    		x1[i]=find(xs.begin(),xs.end(),x1[i])-xs.begin();
    		x2[i]=find(xs.begin(),xs.end(),x2[i])-xs.begin();
    		cout<<x1[i]<<" "<<x2[i]<<endl;
    	}
    	return xs.size()-1;
    }
    //
    int bfs() {
    	int ans=0;
    	//
    	for(int i=0;i<H;i++){
    		for(int j=0;j<W;j++){
    			if(fld[i][j])
    			continue;
    			ans++;
    			queue<pair<int,int> >q;
    			q.push(make_pair(j,i));
    			while(!q.empty()){
    				int sx=q.front().first,sy=q.front().second;
    				q.pop();
    				//
    				for(int k=0;k<4;k++){
    					int tx=sx+dx[k],ty=sy+dy[k];
    					if(tx<0||W<tx||ty<0||H<ty||fld[ty][tx]>0)
    					continue;
    					q.push(make_pair(tx,ty));
    					fld[ty][tx]=1;
    				}
    			}
    		}
    	}
    	return ans;
    }
    //
    void solve() {
    	int i,j,tt=1;
    	while(cin>>W>>H) {
    		cin>>n;
    		for(i=0; i<n; i++) {
    			cin>>X1[i]>>Y1[i]>>X2[i]>>Y2[i];
    		}
    		memset(fld,0,sizeof(fld));
    		//
    		W=compress(X1,X2,W);
    		H=compress(Y1,Y2,H);
    		cout<<endl;
    		for(i=0; i<n; i++) {
    			cout<<X1[i]<<" "<<Y1[i]<<" "<<X2[i]<<" "<<Y1[i]<<endl;
    		}
    		//
    		for(i=0; i<n; i++) {
    			fld[Y1[i]][X1[i]]++;
    			fld[Y2[i]][X2[i]]++;
    			fld[Y1[i]][X2[i]]--;
    			fld[Y2[i]][X1[i]]--;
    		}
    		//
    		for(i=0; i<H; i++) {
    			for(j=1; j<W; j++) {
    				fld[i][j]+=fld[i][j-1];
    			}
    		}
    		for(i=1; i<H; i++) {
    			for(j=0; j<W; j++) {
    				fld[i][j]+=fld[i-1][j];
    			}
    		}
    		for(i=0; i<H; i++) {
    			for(j=0; j<W; j++) {
    				cout<<fld[i][j]<<" ";
    			}
    			cout<<endl;
    		}
    		//
    		//		cout<<bfs()<<endl;
    	}
    }
    
    int main() {
    	ios_base::sync_with_stdio(false);
    #ifdef debug
    	freopen("in.txt", "r", stdin);
    //	freopen("out.txt","w",stdout);
    #endif
    	cin.tie(0);
    	cout.tie(0);
    	solve();
    	/*
    		#ifdef debug
    			fclose(stdin);
    			fclose(stdout);
    			system("out.txt");
    		#endif
    	*/
    	return 0;
    }
    

      

  • 相关阅读:
    hdu 2222 Keywords Search
    Meet and Greet
    hdu 4673
    hdu 4768
    hdu 4747 Mex
    uva 1513 Movie collection
    uva 12299 RMQ with Shifts
    uva 11732 strcmp() Anyone?
    uva 1401
    hdu 1251 统计难题
  • 原文地址:https://www.cnblogs.com/visualVK/p/8483643.html
Copyright © 2011-2022 走看看