比赛 EYOI与SBOI开学欢乐赛5th 评测结果 RRRRRRRRRR
题目名称 积木游戏 最终得分 0
用户昵称 ムラサメ 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2022-09-16 21:02:00
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int n,v,tot=0;
  4. struct node{
  5. int x1,x2,y1,y2,z1,z2;
  6. }c[5010],a[5010];
  7. bool xj(int i,int j){
  8. return !(((a[i].x1>=c[j].x2)||(c[j].x1>=a[i].x2))||((a[i].y1>=c[j].y2)||(c[j].y1>=a[i].y2))||((a[i].z1>=c[j].z2)||(c[j].z1>=a[i].z2)));
  9. }
  10. void add(int x1,int x2,int y1,int y2,int z1,int z2){
  11. a[++tot]=(node){x1,x2,y1,y2,z1,z2};
  12. }
  13. void work(int i,int x1,int x2,int y1,int y2,int z1,int z2,int type){
  14. if(type==1){
  15. int k1=max(c[i].x1,x1),k2=min(c[i].x2,x2);
  16. if(k1>x1){
  17. add(x1,k1,y1,y2,z1,z2);
  18. }
  19. if(k2<x2){
  20. add(k2,x2,y1,y2,z1,z2);
  21. }
  22. work(i,k1,k2,y1,y2,z1,z2,2);
  23. }
  24. if(type==2){
  25. int k1=max(c[i].y1,y1),k2=min(c[i].y2,y2);
  26. if(k1>y1){
  27. add(x1,x2,y1,k1,z1,z2);
  28. }
  29. if(k2<y2){
  30. add(x1,x2,k2,y2,z1,z2);
  31. }
  32. work(i,x1,x2,k1,k2,z1,z2,3);
  33. }
  34. if(type==3){
  35. int k1=max(c[i].z1,z1),k2=min(c[i].z2,z2);
  36. if(k1>z1){
  37. add(x1,x2,y1,y2,z1,k1);
  38. }
  39. if(k2<z2){
  40. add(x1,x2,y1,y2,k2,z2);
  41. }
  42. }
  43. }
  44. int main(){
  45. freopen("satellitecover.in","r",stdin);
  46. freopen("satellitecover.out","w",stdout);
  47. ios::sync_with_stdio(0);
  48. cin.tie(0);
  49. cout.tie(0);
  50. cin>>n;
  51. for(int i=1,x,y,z,r;i<=n;++i){
  52. cin>>x>>y>>z>>r;
  53. c[i].x1=x-r;
  54. c[i].x2=x+r;
  55. c[i].y1=y-r;
  56. c[i].y2=y+r;
  57. c[i].z1=z-r;
  58. c[i].z2=z+r;
  59. }
  60. for(int i=1;i<=n;++i){
  61. for(int j=1;j<=tot;++j){
  62. if(xj(j,i)){
  63. work(i,a[j].x1,a[j].x2,a[j].y1,a[j].y2,a[j].z1,a[j].z2,1);
  64. a[j]=a[tot];
  65. --tot;
  66. --j;
  67. }
  68. }
  69. add(c[i].x1,c[i].x2,c[i].y1,c[i].y2,c[i].z1,c[i].z2);
  70. }
  71. for(int i=1;i<=tot;++i){
  72. v+=(a[i].x2-a[i].x1)*(a[i].y2-a[i].y1)*(a[i].z2-a[i].z1);
  73. }
  74. cout<<v<<endl;
  75. return 0;
  76. }