Nguồn đề bài: http://www.spoj.com/PTIT/problems/PTIT126E/
1. Đề bài PTIT126E spoj
Có một số người tham gia trong một cuộc bầu cử, lá phiếu của mỗi người được ghi lại với kí hiệu như sau:
– Y nghĩa là đồng ý.
– N nghĩa là không đồng ý.
– P nghĩa là có mặt, nhưng không bỏ phiếu.
– A nghĩa là vắng mặt.

Nhiệm vụ của bạn là từ danh sách trạng thái này, xác định kết quả của cuộc bầu cử : Nếu ít nhất một nửa số người vắng mặt, in ra “need quorum”. Ngược lại, cuộc bầu cử được tính. Nếu số người đồng ý lớn hơn số người không đồng ý, in ra “yes”. Nếu số người không đồng ý lớn hơn số người đồng ý, in ra ‘’no’’. Nếu số người đồng ý bằng số người không đồng ý, in ra ‘tie’.
Input
– Gồm nhiều bộ test, mỗi bộ test là 1 dòng chứa danh sách trạng thái của một số người tham gia cuộc bầu cử. (2 <= Số người <= 70)
– Bộ test kết thúc bởi dòng chứa dấu ‘#’
Output
– Mỗi bộ test in trên 1 dòng chứa kết quả của cuộc bầu cử.
Example
Input:
YNNAPYYNY
YAYAYAYA
PYPPNNYA
YNNAA
NYAAA
#
Output:
yes
need quorum
tie
no
need quorum
2. Lời giải PTIT126E spoj PTIT – Bỏ phiếu
– Bài này chủ yếu rèn luyện về câu điều kiện, biến đếm, tư duy hiểu đề và các đọc file với số lần không biết trước.
– Các bạn chỉ cần đếm số phiếu Y, N, P, A rồi so sánh theo yêu cầu đề bài là được.
3. Code tham khảo PTIT126E spoj PTIT – Bỏ phiếu
const fi='';
type data=integer;
var
f:text;
s:string;
procedure xuli;
var i:data;
Y,N,P,A,tmp:data;
begin
y:=0;
n:=0;
p:=0;
a:=0;
for i:=1 to length(s) do
begin
if s[i]='Y' then
inc(y)
else
if s[i]='N' then
inc(n)
else
if s[i]='P' then
inc(p)
else
inc(a);
end;
tmp:=n+y+p;
if tmp<=a then
writeln('need quorum')
else
if y>n then
writeln('yes')
else
if n>y then
writeln('no')
else
if n=y then
writeln('tie');
end;
procedure docfile;
var i:data;
begin
assign(f,fi); reset(f);
repeat
readln(f,s);
if s='#' then
begin
close(f);
exit;
end;
xuli;
until FALSE;
end;
begin
docfile;
end.
