Page **2** of **2**

### Re: 932 - Checking the N-Queens Problem

Posted: **Thu Jun 26, 2008 8:44 am**

by **jurajz**

dreadlord wrote:**WARNING:**
Don't try to solve this problem with a Pascal program. I believe there is some problem with the I/O in Pascal with the input file. I tried the following extremely simple program:

Code: Select all

```
program hang932;
var
TC, i, j : Integer;
car : Char;
begin
while eoln and not eof do readln; (* skip leading newlines *)
readln (TC);
i := 1;
repeat
j := 1;
repeat
car := '.';
repeat
if eoln then
readln
else
read (car)
until (car = '0') or (car = 'X');
if j = TC then break;
inc (j);
until False;
if i = TC then break;
inc (i);
until False;
writeln ('NO');
writeln ('NO')
end.
```

, which of course may not expect to get AC, but definitely shouldn't ever get Time Limit Exceeded, as it does. I get no problems when using this loops structure in my computer.

I believe this' something to do with the first readln(TC), as I get WA (as expected) when replacing the two outermost repeat-until loops by "for [ i | j ] := 1 to TC do". Maybe it gets zero for TC for some reason? Might this happen because the input text file contains some stranger line terminators, kind of DOS or so?

I coded it in Pascal and have no problem with reading the input. Here is reading part from my Pascal program:

Code: Select all

```
program pr932;
var tab:array[0..31,0..31]of char;
n,i,j:longint;
begin
while not eof(input) do
begin
readln(n);
for i:=1 to n do
begin
for j:=1 to n do read(tab[i,j]);
readln;
end;
{ ... }
end;
end.
```

I have AC in 0.000.

### Re: 932 - Checking the N-Queens Problem

Posted: **Tue Apr 08, 2014 1:30 am**

by **brianfry713**

This was a red check problem. I just created a dataset for it. There is no need for a special judge, I didn't include any cases in my input that have multiple correct outputs. The problem statement is now correct, there are multiple test cases.

### Re: 932 - Checking the N-Queens Problem

Posted: **Thu Jun 19, 2014 8:44 am**

by **lucastan**

Hi all, I'm pretty sure I got this right but I keep getting WA.. any hint?

Code: Select all

```
#include<iostream>
#include<cstring>
using namespace std;
int row[100];
int col[100];
int d1[100];
int d2[100];
int board[35][35];
int n;
inline void set(int i, int j){row[i]=col[j]=d1[i+j]=d2[i-j+31]=1;}
inline void clear(int i, int j){row[i]=col[j]=d1[i+j]=d2[i-j+31]=0;}
inline int isset(int i, int j){return row[i] || col[j] || d1[i+j] || d2[i-j+31];}
int check(){
for (int i=0;i < n;i++)
for (int j=0;j < n;j++){
if(!board[i][j])continue;
if (isset(i,j))return 0;
set(i,j);
}
return 1;
}
int find(){
for (int a=1; a <= n;a++){
int found=1;
int arow, acol;
memset(row,0,sizeof row);
memset(col,0,sizeof col);
memset(d1,0,sizeof d1);
memset(d2,0,sizeof d2);
for (int i=0;i < n;i++){
for (int j=0;j < n;j++){
if (board[i][j]==a){arow=i;acol=j;}
if(board[i][j]==a ||!board[i][j])continue;
if (isset(i,j)){i=999;found=0;break;}
set(i,j);
}
}
if(found){
for (int i=0;i < n;i++)
for (int j=0;j < n;j++){
if(!isset(i,j)){
if(arow == i || acol == j || arow+acol == i+j || arow-acol==i-j){
board[arow][acol]=0;
board[i][j]=1;
return 1;
}
}
}
}
}
return 0;
}
int main(){
while(cin>>n){
memset(board, 0, sizeof board);
memset(row,0,sizeof row);
memset(col,0,sizeof col);
memset(d1,0,sizeof d1);
memset(d2,0,sizeof d2);
int f=1;
for (int i=0;i < n;i++)
for (int j=0;j < n;j++){
char c;
cin>>c;
if (c=='X'){
board[i][j]=f++;
}
}
if(check())cout<<"YES"<<endl;
else{
cout<<"NO"<<endl;
if(find()){
cout<<"YES"<<endl;
for (int i=0;i < n;i++){
for (int j=0;j < n;j++){
cout << (board[i][j] ? 'X':'0') ;
}
cout<<endl;
}
}else cout<<"NO"<<endl;
}
cout<<endl;
}
return 0;
}
```

### Re: 932 - Checking the N-Queens Problem

Posted: **Thu Jun 19, 2014 10:27 pm**

by **brianfry713**

Print a blank line between test cases. Don't print an extra blank line at the end.