這題在寫得時候真的很煩人
memset不知道為什麼完全沒有作用...
害我原本==1 找了好久才發現根本不會被set成 1 = =
另外就是再處理某一格是否存在方塊時的邏輯:
1. 先把可以看透的行刪掉
2. 檢查是否每一方塊從每一面看都是同一顏色
想起來很容易
但是在實作上有一些難點:
1.
輸入的格式非常的機車
我在處理的時候就沒弄好
導致投影到真實物件上時要做很多轉換 030
2.
因為在檢查一個方塊是否存在時
不知道隔壁的方塊是否真的存在
還是只是還沒踢除而已
所以就給他跑一個while
直到都沒有更新時就可以判定已經檢查完成
因為邊寫邊RC
寫的超冗
結果DEBUG超久= =
寫這麼冗貼出來有點不好意思///
#include<iostream>
#include<stdio.h>
#include<string.h>
bool check(int obj[][10][10], int n, int i, int j, int k, char side[][10][10]){
char color=1;
int m,F;
m=i+1;F=1;
if(side[3][k][n-j-1]=='.' || side[1][k][j]=='.' || side[0][k][i]=='.' || side[2][k][n-i-1]=='.' || side[5][n-j-1][i]=='.' || side[4][j][i]=='.')
return false;
while(F && m>=0 && m<n){ //3
if(obj[m][j][k]!=0)
F=0;
m++;
}
if(F){
color=side[3][k][n-j-1];
}
m=i-1;F=1;
while(F && m>=0 && m<n){ //1
if(obj[m][j][k]!=0)
F=0;
m--;
}
if(F){
if(color==1)
color=side[1][k][j];
else if(color!=side[1][k][j])
return false;
}
m=j+1;F=1;
while(F && m>=0 && m<n){ //0
if(obj[i][m][k]!=0)
F=0;
m++;
}
if(F){
if(color==1)
color=side[0][k][i];
else if(color!=side[0][k][i])
return false;
}
m=j-1;F=1;
while(F && m>=0 && m<n){ //2
if(obj[i][m][k]!=0)
F=0;
m--;
}
if(F){
if(color==1)
color=side[2][k][n-i-1];
else if(color!=side[2][k][n-i-1])
return false;
}
m=k+1;F=1;
while(F && m>=0 && m<n){ //5
if(obj[i][j][m]!=0)
F=0;
m++;
}
if(F){
if(color==1)
color=side[5][n-j-1][i];
else if(color!=side[5][n-j-1][i])
return false;
}
m=k-1;F=1;
while(F && m>=0 && m<n){ //4
if(obj[i][j][m]!=0)
F=0;
m--;
}
if(F){
if(color==1)
color=side[4][j][i];
else if(color!=side[4][j][i])
return false;
}
return true;
}
int main(){
int ans;
int obj[10][10][10];
char side[6][10][10]; //F L BA R T BU
memset(obj,1,4*10*10*10);
int n;
while(scanf("%d",&n)==1 && n!=0){
ans=0;
memset(obj,1,4*10*10*10);
for(int i=0 ; i<n ; i++)
for(int j=0 ; j<6 ; j++)
for(int k=0 ; k<n ; k++)
scanf(" %c",&side[j][i][k]);
int FINE=1;
while(FINE){
FINE=0;
for(int i=0 ; i<n ; i++)
for(int j=0 ; j<n ; j++)
for(int k=0 ; k<n ; k++)
if(obj[i][j][k]!=0)
if(!check(obj, n, i, j, k,side)){
obj[i][j][k]=0;
FINE=1;
}
}
for(int i=0 ; i<n ; i++)
for(int j=0 ; j<n ; j++)
for(int k=0 ; k<n ; k++)
if(obj[i][j][k]!=0)
ans+=1;
printf("Maximum weight: %d gram(s)\n",ans);
}
return 0;
}
寫程式絕對要專心><
沒有留言:
張貼留言
TEST