| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
小心死循环!注意判断每个0的O对应哪两个H的时猴不熊只看O本身是不是只剩一种情况,还要考虑四周的某一个H是不是只有唯一的O与之匹配。否则会死循环TLE。
//============================================================================
// Name : main1099.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
using namespace std;
int Ostate[20][20];
bool Hstate[40][40];
int N;
void init(){
for(int i = 0; i < 20; i++){
for(int j = 0; j < 20; j++){
Ostate[i][j] = 0;
}
}
for(int i = 0; i < 40; i++){
for(int j = 0; j < 40; j++){
Hstate[i][j] = 0;
}
}
}
void setZuo(int x, int y){
Ostate[x][y] += 2;
Hstate[2*x][y] = 1;
}
void setYou(int x, int y){
Ostate[x][y] += 1;
Hstate[2*x][y+1] = 1;
}
void setShang(int x, int y){
Ostate[x][y] += 8;
Hstate[2*x-1][y] = 1;
}
void setXia(int x, int y){
Ostate[x][y] += 4;
Hstate[2*x+1][y] = 1;
}
bool okZuo(int x, int y){
if(y==0) return true;
return (Ostate[x][y-1])%2==0;
}
bool okYou(int x, int y){
if(y==N-1) return true;
return (Ostate[x][y+1]>>1)%2==0;
}
bool okShang(int x, int y){
if(x==0) return false;
return (Ostate[x-1][y]>>2)%2==0;
}
bool okXia(int x, int y){
if(x==N-1) return false;
return (Ostate[x+1][y]>>3)%2==0;
}
bool hasZuo(int x, int y){
return (Ostate[x][y]>>1)%2==1;
}
bool hasYou(int x, int y){
return (Ostate[x][y])%2==1;
}
bool hasShang(int x, int y){
if(x==0) return false;
return (Ostate[x][y]>>3)%2==1;
}
bool hasXia(int x, int y){
if(x==N-1) return false;
return (Ostate[x][y]>>2)%2==1;
}
bool wyZuo(int x, int y){
return okZuo(x,y) && (y==0 || Ostate[x][y-1] > 0);
}
bool wyYou(int x, int y){
return okYou(x,y) && (y==N-1 || Ostate[x][y+1] > 0);
}
bool wyShang(int x, int y){
return okShang(x,y) && Ostate[x-1][y] > 0;
}
bool wyXia(int x, int y){
return okXia(x,y) && Ostate[x+1][y] > 0;
}
void set(int x, int y, int n){
switch(n){
case 0:
setZuo(x,y);
setShang(x,y);
break;
case 1:
setShang(x,y);
setYou(x,y);
break;
case 2:
setYou(x,y);
setXia(x,y);
break;
case 3:
setXia(x,y);
setZuo(x,y);
break;
default:
break;
}
}
void print(){
for(int i = 0; i < 4*N+3; i++) cout << "*" ;
cout << endl;
for(int i = 0; i <= N-1; i++){
if(i != 0){
cout << "* ";
for(int j = 0; j <= N-1; j++){
cout << " ";
if(hasShang(i,j)) cout << "|";
else cout << " ";
cout << " ";
}
cout << "*" << endl;
}
cout << "*H";
for(int j = 0; j <= N-1; j++){
if(hasZuo(i,j)) cout << "-";
else cout << " ";
cout << "O";
if(hasYou(i,j)) cout << "-";
else cout << " ";
cout << "H";
}
cout << "*\n";
if(i != N-1){
cout << "* ";
for(int j = 0; j <= N-1; j++){
cout << " ";
if(hasXia(i,j)) cout << "|";
else cout << " ";
cout << " ";
}
cout << "*" << endl << "* ";
for(int j = 0; j <= N-1; j++){
cout << " H ";
}
cout << "*" << endl;
}
}
for(int i = 0; i < 4*N+3; i++) cout << "*" ;
cout << endl;
}
int main() {
int cases = 0;
while(1){
cases++;
init();
cin >> N;
if(!N) return N;
if(cases != 1) cout << endl;
cout << "Case " << cases << ":\n";
cout << endl;
int ASM[20][20];
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
cin >> ASM[i][j];
}
}
int remain = N*N;
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
if(ASM[i][j] == 1){
setZuo(i, j);
setYou(i, j);
remain--;
}
else if(ASM[i][j] == -1){
setShang(i, j);
setXia(i, j);
remain--;
}
}
}
while(remain > 0){
//print();
//cout << remain << endl;
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
if(Ostate[i][j] > 0) continue;
int kygs = 0;
int tag = 0;
if(okZuo(i,j) && okShang(i,j)) {kygs++; tag = 0;}
if(okShang(i,j) && okYou(i,j)) {kygs++; tag = 1;}
if(okYou(i,j) && okXia(i,j)) {kygs++; tag = 2;}
if(okXia(i,j) && okZuo(i,j)) {kygs++; tag = 3;}
if(kygs == 1){
set(i,j,tag);
remain--;
continue;
}
if((wyZuo(i,j) && okShang(i,j) && !okXia(i,j)) || (wyShang(i,j) && okZuo(i,j) && !okYou(i,j))){
set(i,j,0);
remain--;
}
if((wyShang(i,j) && okYou(i,j) && !okZuo(i,j)) || (wyYou(i,j) && okShang(i,j) && !okXia(i,j))){
set(i,j,1);
remain--;
}
if((wyYou(i,j) && okXia(i,j) && !okShang(i,j)) || (wyXia(i,j) && okYou(i,j) && !okZuo(i,j))){
set(i,j,2);
remain--;
}
if((wyXia(i,j) && okZuo(i,j) && !okYou(i,j)) || (wyZuo(i,j) && okXia(i,j) && !okShang(i,j))){
set(i,j,3);
remain--;
}
}
}
}
print();
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator