P141PROJ spoj PTIT – ROUND 1J – Test IQ

Nguồn đề bài: http://www.spoj.com/PTIT/problems/P141PROJ/

1. Đề bài P141PROJ spoj

Test IQ là một vòng khá quen thuộc trong khi tuyển dụng. Công ty X muốn test qua khả năng tư duy của bạn, nên đã đưa ra một bài tập IQ nhỏ như sau:

Bạn nhận được một tấm bìa 4×4, mỗi ô của tấm bìa được sơn màu trắng hoặc đen. Nhà tuyển dụng muốn bạn sơn lại nhiều nhất 1 ô, sao cho tồn tại một hình vuông 2×2 mà màu của chúng là đồng nhất.

Input

Gồm 4 dòng, mỗi dòng gồm 4 kí tự. Kí tự ‘.’ thể hiện rằng ô đó được sơn màu trắng, kí tự ‘#’ thể hiện rằng ô đó được sơn màu đen.

Output

In ra “YES” nếu có thể thực hiện được yêu cầu, in ra “NO” trong trường hợp ngược lại.

Example

Test 1:

Input:

####
.#..
####
….

####

.#..

####

….

 

Output:

YES

 

Test 2:

Input:

####

….

####

….

Output:

NO

##################

Bài này không có gì khó, các bạn có thể làm tốt hơn code mẫu

2. Code tham khảo P141PROJ spoj PTIT

const   fi='';
type
        data=longint;
var
        f:text;
        A:array[-10..20,-10..20] of char;
        i,j:data;
procedure xuli;
begin
        assign(f,fi); reset(f);
        for i:=-10 to 20 do
                for j:=-10 to 20 do
                        A[i,j]:=' ';
        for i:=1 to 4 do
                begin
                        for j:=1 to 4 do
                                read(f,a[i,j]);
                        readln(f);
                end;

        close(f);

        for i:=1 to 4 do
                for j:=1 to 4 do
                        begin
                                if ((a[i,j]=a[i,j-1]) and (a[i,j-1]=a[i-1,j-1]) and (a[i,j-1]=a[i-1,j]))
                                or ((a[i,j]=a[i,j+1]) and (a[i,j+1]=a[i-1,j+1]) and (a[i,j+1]=a[i-1,j]))
                                or ((a[i,j]=a[i,j+1]) and (a[i,j+1]=a[i+1,j+1]) and (a[i,j+1]=a[i+1,j]))
                                or ((a[i,j]=a[i,j-1]) and (a[i,j-1]=a[i+1,j-1]) and (a[i,j-1]=a[i+1,j]))

                                then
                                        begin
                                                writeln('YES');
                                                exit;
                                        end;

                        end;

        for i:=1 to 4 do
                for j:=1 to 4 do
                        begin
                                if ((a[i,j]<>a[i,j-1]) and (a[i,j-1]=a[i-1,j-1]) and (a[i,j-1]<>' ') and (a[i,j-1]=a[i-1,j]))
                                or ((a[i,j]<>a[i,j+1]) and (a[i,j+1]=a[i-1,j+1]) and (a[i,j+1]<>' ') and (a[i,j+1]=a[i-1,j]))
                                or ((a[i,j]<>a[i,j+1]) and (a[i,j+1]=a[i+1,j+1]) and (a[i,j+1]<>' ') and (a[i,j+1]=a[i+1,j]))
                                or ((a[i,j]<>a[i,j-1]) and (a[i,j-1]=a[i+1,j-1]) and (a[i,j-1]<>' ') and (a[i,j-1]=a[i+1,j]))

                                then
                                        begin
                                                writeln('YES');
                                                exit;
                                        end;

                        end;
        writeln('NO');

end;


begin
        xuli;
end.

 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *