蒟蒻求助 自己做+借鉴题解全是20(样例都是151)
查看原帖
蒟蒻求助 自己做+借鉴题解全是20(样例都是151)
781610
wdsjgzr楼主2023/7/20 10:06
#include<bits/stdc++.h>
using namespace std;

int n;
int ax,ay,az;
int bx,by,bz;
int INF=114514;
int cnt=0;

bool check(int i,int j,int k){	 
	int if2=i-2,iz2=i+2,jf2=j-2,jz2=j+2,kf2=k-2,kz2=k+2;
	int iif=-INF,iiz=INF,jjf=-INF,jjz=INF,kkf=-INF,kkz=INF; 
	if(if2<1){
		iif=i;//从1到i 
		if2=i+n-2;//或从i+n-2到n 
	} 
	if(iz2>n){
		iiz=i;
		iz2=i-n+2;
	} 
	if(jf2<1){
		jjf=j;
		jf2=j+n-2;
	} 
	if(jz2>n){
		jjz=j;
		jz2=j-n+2;
	} 
	if(kf2<1){
		kkf=k;
		kf2=k+n-2;
	} 
	if(kz2>n){
		kkz=k;
		kz2=k-n+2;
	}
	cout<<4;
		
		
	if(((ax<=iif||ax>=if2)&&(ax>=iiz||ax<=iz2)) && ((ay<=jjf||ay>=jf2)&&(ay>=jjz||ay<=jz2)) && ((az<=kkf||az>=kf2)&&(az>=kkz||az<=kz2))) 
		return true;
	else if(((bx<=iif||bx>=if2)&&(bx>=iiz||bx<=iz2)) && ((by<=jjf||by>=jf2)&&(by>=jjz||by<=jz2)) && ((bz<=kkf||bz>=kf2)&&(bz>=kkz||bz<=kz2))) 
		return true;
	else 
		return false;
}

int main()
{
	int x,y,z;
	cin>>n;
	cin>>ax>>ay>>az;
	cin>>bx>>by>>bz;
	if(n==1){
		cout<<1;
		return 0;
	}
//	cout<<check(1,2,2)<<endl;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=n;k++){
				if(check(i,j,k)==true){
					cout<<i<<" "<<j<<" "<<k<<endl;
					cnt++;
				}
			}
		}
	}
	cout<<cnt;
	return 0;
}

自己做的↑

借鉴题解的↓

#include<bits/stdc++.h>
using namespace std;

int n;
int x,y,z;
int a,b,c;
int cnt;
bool vis[105][105][105];

int main()
{
	cin>>n;
	cin>>x>>y>>z;
	cin>>a>>b>>c;
	if(n==1){
		cout<<1;
		return 0;
	}
	for(int i=x-2;i<=x+2;i++){
		for(int j=y-2;j<=y+2;j++){
			for(int k=z-2;k<=z+2;k++){
				if(vis[(i+n)%n][(j+n)%n][(k+n)%n]==false){//没算过 
					cout<<i<<" "<<j<<" "<<k<<endl;
					cnt++;
					vis[(i+n)%n][(j+n)%n][(k+n)%n]=true;
				}
			}
		}
	}
	for(int i=a-2;i<=a+2;i++){
		for(int j=b-2;j<=b+2;j++){
			for(int k=c-2;k<=c+2;k++){
				if(vis[(i+n)%n][(j+n)%n][(k+n)%n]==false){
					cout<<i<<" "<<j<<" "<<k<<endl;
					cnt++;
					vis[(i+n)%n][(j+n)%n][(k+n)%n]=true;
				}
			}
		}
	}
	cout<<cnt;
	return 0;
}
2023/7/20 10:06
加载中...