最近在学C++,写的都是学校很基础的题目,好久没写洛谷了。
一开始下意识的当成学校的基础题,想着单纯的模拟计算。WA了一遍之后才意识到这个切割的参数可能是包含已经切割过的,洛谷的老套路了。
简单说下思路
1.开辟一个三维数组,元素初始化为0;
2.输入切割次数和切割的坐标;
3.将坐标间的点全部化为0,用sum+=遍历整个三维数组。
废话不多说,上代码
#include <iostream>
using namespace std;
int zfx[40][40][40]={0};
//int qiege(int a,int b,int c,int a1,int b1,int c1)
//{
// return (a1-a+1)*(b1-b+1)*(c1-c+1);
//}
void qiege(int a,int b,int c,int a1,int b1,int c1)
{
int i=0,j=0,k=0;
for(i=a,j=b,k=c;i<=a1;i++)
{
for(j=b;j<=b1;j++)
{
for(k=c;k<=c1;k++)
{
zfx[i][j][k]=0;
}
}
}
}
int main ()
{
int sum=0;
int w,x,h;
cin>>w>>x>>h;
for(int i=1,j=1,k=1;i<=w;i++)
{
for(j=1;j<=x;j++)
{
for(k=1;k<=h;k++)
{
zfx[i][j][k]=1;
// sum+=zfx[i][j][k];
}
}
}
// cout << sum<<endl;
int n;
cin>>n;
for (int i=0;i<n;i++)
{
int a,b,c;
int a1,b1,c1;
cin>>a>>b>>c;
cin>>a1>>b1>>c1;
qiege(a,b,c,a1,b1,c1);
}
for(int i=0,j=0,k=0;i<=w;i++)
{
for(j=0;j<=x;j++)
{
for(k=0;k<=h;k++)
{
sum+=zfx[i][j][k];
}
}
}
cout << sum<<endl;
return 0;
}
记得把数组开大点,一开始开20会出现数组越界的情况