0580:Fish
問題文
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0580
座標圧縮した。
#include<iostream> #include<vector> #include<algorithm> #include<map> #define all(c) (c).begin(),(c).end() #define f first #define s second using namespace std; typedef long long ll; struct point{ll x,y,z;}; typedef pair<point,point> P; int main(void){ ll n,k,x1,x2,y1,y2,z1,z2; vector<ll>x,y,z; cin >> n >> k; vector<P> p(n); for(int i=0;i<n;i++){ cin >> p[i].f.x >> p[i].f.y >> p[i].f.z; cin >> p[i].s.x >> p[i].s.y >> p[i].s.z; x.push_back(p[i].f.x); x.push_back(p[i].s.x); y.push_back(p[i].f.y); y.push_back(p[i].s.y); z.push_back(p[i].f.z); z.push_back(p[i].s.z); } sort(all(x)); sort(all(y)); sort(all(z)); map<ll,int>X,Y,Z; for(int i=0;i<x.size();i++)X[x[i]]=i; for(int i=0;i<y.size();i++)Y[y[i]]=i; for(int i=0;i<z.size();i++)Z[z[i]]=i; int grid[101][101][101]; for(int i=0;i<101;i++) for(int j=0;j<101;j++) for(int l=0;l<101;l++)grid[i][j][l]=0; for(int i=0;i<n;i++) for(int xi=X[p[i].f.x];xi<X[p[i].s.x];xi++) for(int yi=Y[p[i].f.y];yi<Y[p[i].s.y];yi++) for(int zi=Z[p[i].f.z];zi<Z[p[i].s.z];zi++) grid[xi][yi][zi]++; ll ans=0; for(int i=0;i<x.size()-1;i++) for(int j=0;j<y.size()-1;j++) for(int l=0;l<z.size()-1;l++) if(grid[i][j][l]>=k) ans+=(x[i+1]-x[i])*(y[j+1]-y[j])*(z[l+1]-z[l]); cout << ans << endl; return 0; }