205 条题解
-
0songshudazuo LV 6 @ 2009-02-05 16:43:42
反正1
-
02009-02-02 11:11:27@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msvar a:array[1..9,1..9] of 1..9;
n,i,x,y,j,xx,yy:integer;
t:set of 1..9;
flg:boolean;
b:array[1..20] of boolean;
function te1:boolean;
begin
for y:= 1 to 9 do
begin
t:=[];
for x:= 1 to 9 do
t:=t+[a[x,y]];
for j:= 1 to 9 do
if ( not ( j in t )) then exit(false);
end;
end;
function te2:boolean;
begin
for xx:= 1 to 3 do
for yy:= 1 to 3 do
begin
x:=3*(xx-1) + 1 ;
y:=3*(yy-1) + 1 ;
t:=[a[x,y],a[x,y+1],a[x,y+2],a[x+1,y],a[x+1,y+1],a[x+1,y+2],a[x+2,y],a[x+2,y+1],a[x+2,y+2]];
for j:= 1 to 9 do
if ( not ( j in t )) then exit(false);
end;
end;
begin
readln(n);
for i:= 1 to n do
begin
flg:=true;
for x:= 1 to 9 do
begin
t:=[];
for y:= 1 to 9 do
begin
read(a[x,y]);
t:=t+[a[x,y]];
end;
for j:= 1 to 9 do
if ( not ( j in t )) then flg:=false;
readln;
end;
if flg then
flg:=te1;
if flg then
flg:=te2;
if i < n then readln;
b[i]:=flg;
end;
for i:= 1 to n do
if b[i] then writeln('Right')
else writeln('Wrong');
end.最猥琐的方法
-
02009-01-28 01:47:23@
用BOOLEAN数组记录边都边判断,不行的时候不能EXIT退出来,因为有多组数据,半路跑出来就读不完,影响下一组。
const r:array [1..9] of integer = (1,1,1,2,2,2,3,3,3);
var i,j,k,x,n:integer;
f1,f2,f3:array [1..9,1..9] of boolean;function check:boolean;
begin
fillchar(f1,sizeof(f1),0);
fillchar(f2,sizeof(f2),0);
fillchar(f3,sizeof(f3),0);
check:=true;
for i:=1 to 9 do
for j:=1 to 9 do
begin
read(x);
if f1[x,i] or f2[x,j] or f3[x,r[j]+(r[i]-1)*3] then
check:=false;
f1[x,i]:=true; f2[x,j]:=true; f3[x,r[j]+(r[i]-1)*3]:=true;
end;
end;begin
readln(n);
for k:=1 to n do
if check then writeln('Right')
else writeln('Wrong');
end. -
02009-01-26 12:54:45@
var a:array [1..9,1..9] of byte;
jihe:set of 1..9;
flag:boolean;
t,i,n,j,ki,kj:integer;
begin
flag:=true;
readln(n);
t:=0;
repeat
inc(t);
for i:=1 to 9 do
begin
for j:=1 to 9 do
read(a);
end;
flag:=true;
for i:=1 to 9 do
begin
jihe:=[];
for j:=1 to 9 do
jihe:=jihe+[a];
if jihe[1..9] then
begin
flag:=false;
break;
end;
end;
if not flag then writeln('Wrong');
if flag then
begin
for j:=1 to 9 do
begin
jihe:=[];
for i:=1 to 9 do
jihe:=jihe+[a];
if jihe[1..9] then
begin
flag:=false;
break;
end;
end;
if not flag then writeln('Wrong');
end;
if flag then
begin
ki:=1;
kj:=1;
repeat
if ki = 10 then begin ki:=1; inc(kj,3); end;
if kj = 10 then break;
jihe:=[];
for i:=ki to ki+2 do
for j:=kj to kj+2 do
jihe:=jihe+[a];
if jihe[1..9] then flag:=false;
if not flag then writeln('Wrong');
if not flag then break;
inc(ki,3);
until false;
end;
if flag then writeln('Right');
until t>=n
end. -
02009-01-13 20:14:25@
ac100题纪念!!!!!!!!!!!
-
02009-01-06 22:27:51@
判断时 打成 Flag:=(L = [1..9])了...
结果 竟然只有第三组错...
改成 Flag:= Flag And (L = [1..9]) 就AC了... -
02008-12-31 19:46:06@
#include
#include
#define clrnum() memset(num,0,sizeof(num))
int main() {
int n,i,j,k,m,p,q;
char su[9][9],num[10];
scanf("%d",&n);
for(i=0;i -
02008-12-28 11:17:35@
唉,本人想不到什么好方法,就胡乱写了写,虽然AC了,一共80行!无语了!
-
02008-12-20 14:31:34@
为什么牛们代码都写那么长?
我40多行就可以AC
思路是这样的:
首先读入一个完整的数独,对每个小九宫格进行判断,如果不满足条件(1-9全部出现)就输出Wrong;如果所有的小九宫格都符合条件,再判断每行和每列.
也许我AC是由于数据不够强,因为我没有判断每一斜行(因为很麻烦),糊涂地AC了,自己都不明白这样能不能考虑全面.
希望大牛指出不足.... -
02008-12-17 16:09:09@
我汗。。。谁解释下这是咋回事?
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:运行超时|格式错误...
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms -
02008-12-02 21:41:36@
var n,i,j,k:integer;
a:array[1..20,1..9,1..9]of byte;
ok:array[1..9]of 0..1;
f:boolean;
begin
readln(n);
for i:=1 to n do
for j:=1 to 9 do begin
for k:=1 to 9 do
read(a);
readln;
end;
for i:=1 to n do begin
f:=true;
for j:=1 to 9 do begin
fillchar(ok,sizeof(ok),0);
for k:=1 to 9 do
ok[a]:=1;
for k:=1 to 9 do
if ok[k]=0 then begin
f:=false;
break;
end;
end;
if f=false then begin
writeln('Wrong');
break;
end else begin
for j:=1 to 9 do begin
fillchar(ok,sizeof(ok),0);
for k:=1 to 9 do
ok[a]:=1;
for k:=1 to 9 do
if ok[k]=0 then begin
f:=false;
break;
end;
end;
if f=false then begin
writeln('Wrong');
break;
end else begin
fillchar(ok,sizeof(ok),0);
for j:=1 to 3 do
for k:=1 to 3 do
ok[a]:=1;
for j:=1 to 9 do if ok[j]=0 then begin
f:=false;
break;
end;
fillchar(ok,sizeof(ok),0);
for j:=1 to 3 do
for k:=4 to 6 do
ok[a]:=1;
for j:=1 to 9 do if ok[j]=0 then begin
f:=false;
break;
end;
fillchar(ok,sizeof(ok),0);
for j:=1 to 3 do
for k:=7 to 9 do
ok[a]:=1;
for j:=1 to 9 do if ok[j]=0 then begin
f:=false;
break;
end;
fillchar(ok,sizeof(ok),0);
for j:=4 to 6 do
for k:=1 to 3 do
ok[a]:=1;
for j:=1 to 9 do if ok[j]=0 then begin
f:=false;
break;
end;
fillchar(ok,sizeof(ok),0);
for j:=4 to 6 do
for k:=4 to 6 do
ok[a]:=1;
for j:=1 to 9 do if ok[j]=0 then begin
f:=false;
break;
end;
fillchar(ok,sizeof(ok),0);
for j:=4 to 6 do
for k:=7 to 9 do
ok[a]:=1;
for j:=1 to 9 do if ok[j]=0 then begin
f:=false;
break;
end;
fillchar(ok,sizeof(ok),0);
for j:=7 to 9 do
for k:=1 to 3 do
ok[a]:=1;
for j:=1 to 9 do if ok[j]=0 then begin
f:=false;
break;
end;
fillchar(ok,sizeof(ok),0);
for j:=7 to 9 do
for k:=4 to 6 do
ok[a]:=1;
for j:=1 to 9 do if ok[j]=0 then begin
f:=false;
break;
end;
fillchar(ok,sizeof(ok),0);
for j:=7 to 9 do
for k:=7 to 9 do
ok[a]:=1;
for j:=1 to 9 do if ok[j]=0 then begin
f:=false;
break;
end;
end;
end;
if f=false then writeln('Wrong')else writeln('Right');
end;
end.为什么只能得40分???
-
02008-11-18 01:43:18@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msprogram check_num;
var row,line,gz:array[1..9,1..9]of word;
n,num:word;
i:word;
stemp:word;
procedure inpu;
var h,g,k,l,q:word;
begin
fillchar(row,sizeof(row),0);
fillchar(line,sizeof(line),0);
fillchar(gz,sizeof(gz),0);
q:=1;l:=0;
for k:=1 to 3 do
begin
for h:=1 to 3 do
begin
inc(l);
for g:=1 to 3 do
begin
read(stemp);
inc(gz[q,stemp]);
inc(line[l,stemp]);
inc(row[g,stemp]);
end;
for g:=4 to 6 do
begin
read(stemp);
inc(gz[q+1,stemp]);
inc(line[l,stemp]);
inc(row[g,stemp]);
end;
for g:=7 to 9 do
begin
read(stemp);
inc(gz[q+2,stemp]);
inc(line[l,stemp]);
inc(row[g,stemp]);
end;
readln;
end;
inc(q,3);
end;
end;
procedure check;
var g,h,k:word;
begin
for g:=1 to 9 do
begin
k:=0;
for h:=1 to 9 do
k:=k+(line[g,h] mod 2);
if k9 then
begin
writeln('Wrong');
exit;
end;
end;
for g:=1 to 9 do
begin
k:=0;
for h:=1 to 9 do
k:=k+(row[g,h] mod 2);
if k9 then
begin
writeln('Wrong');
exit;
end;
end;
for g:=1 to 9 do
begin
k:=0;
for h:=1 to 9 do
k:=k+(gz[g,h] mod 2);
if k9 then
begin
writeln('Wrong');
exit;
end;
end;
writeln('Right');
end;Begin
read(n);
for i:=1 to n do
begin
readln;
inpu;
check;
end;
End. -
02008-11-11 13:09:22@
VS_FLY的用方差判断的不成立。
写了个程序枚举证明(我连均值(总和)都带上了,依旧不成立),得到932400组解,大于9!=362880。程序如下(脑残风格,其实可以利用main函数来递归,我懒得改了):
/*sudoku.c by Tydus.*/
#include
int a[9]={1,2,3,4,5,6,7,8,9};
int i,s,sum;void it(){
for(i=0,s=0;i -
02008-11-10 15:33:50@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
┐
┌─┐│ ┐
│├─┘
│├─╮
┌─╯│ │
└ └╯ ╯ -
02008-11-08 08:20:38@
忘了一个fillchar,交了3遍......
-
02008-11-03 17:47:04@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案错误...程序输出比正确答案长
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:90 有效耗时:0ms
?????????编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
竟然2次都90,55555 -
02008-11-03 09:11:16@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案错误... ├ 标准行输出
├ 错误行输出
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案错误... ├ 标准行输出
├ 错误行输出
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
why....中间不应该BREAK... -
02008-10-28 17:38:43@
一次AC
var
n:integer;
a:array[1..9,1..9] of integer;function truge:boolean;
var
f:boolean;
i,j,k,l,s,t:longint;
begin
if f then
for i:=1 to 9 do
for j:=1 to 8 do
for k:=j+1 to 9 do if (a=a) or (a[j,i]=a[k,i]) then exit(false);
for i:=0 to 2 do
for j:=0 to 2 do
for k:=i*3+1 to (i+1)*3 do
for l:=j*3+1 to (j+1)*3 do
for s:=i*3+1 to (i+1)*3 do
for t:=j*3+1 to (j+1)*3 do
if ((ks) or (lt)) and (a[k,l]=a) then exit(false);
truge:=true;end;
procedure main;
var
i,j,k:longint;
begin
readln(n);
for k:=1 to n do
begin
for i:=1 to 9 do
for j:=1 to 9 do read(a);
if kn then readln;
if truge then writeln('Right') else writeln('Wrong');
end;
end;
begin
main;
end. -
02008-10-22 11:33:05@
数据量很小,,一次AC
暴力破解就行编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02008-10-20 17:04:02@
about: