Nguồn đề bài: http://www.spoj.com/PTIT/problems/BCTHIDAU/
Nội dung bài viết
1. Đề bài BCTHIDAU spoj PTIT
Trong cuộc thi ACM, các đội thi đấu với nhau. Thứ hạng của mỗi đội phụ thuộc vào: số lượng bài giải được và số điểm bị phạt (điểm phạt phụ thuộc vào thời gian và số lần nộp bài trước khi bài đó được giải đúng). Điểm phạt bằng thời gian nộp bài đúng cộng với 20 phút cho mỗi lần nộp sai. Nếu một bài không giải được thì những lần nộp sai bài đó không bị tính điểm phạt. Như vậy nếu đội giải đúng vào lần nộp thứ 2, sau 20 phút thì điểm phạt sẽ là 40 điểm. Đội thắng là đội giải được nhiều nhất, nếu có nhiều đội có số bài giải giống nhau thì đội bị phạt ít hơn sẽ giành chiến thắng.
Input: Cuộc thi ACM lần này chỉ có 4 bài.
Dòng 1: số n tương ứng với số đội thi
Dòng 2 đến dòng n+1: Mỗi dòng ghi
<Tên> <p1SuB> <p1Time> <p2SuB> <p2Time>….<p4Time>
Thành phần đầu tiên là tên đội, không chứa dấu cách. Sau đó là thông tin về đội đó: p1Sub số lần đội nộp lời giải cho bài 1, p1Time là thời điểm đội nộp đúng, nếu đội không giải đúng được bài 1 thì p1Time=0, tương tự với 3 bài còn lại.
Output: Ghi tên đội thắng, số bài giải được, số điểm phạt
Ví dụ cho Input và Output:
INPUT | OUTPUT | |
4 Stars 2 20 5 0 4 190 3 220 Rockets 5 180 1 0 2 0 3 100 Penguins 1 15 3 120 1 300 4 0 Marsupials 9 0 3 100 2 220 3 80 | Penguins 3 475 |
2. Thuật toán BCTHIDAU spoj PTIT
– Từ dữ liệu đưa vào của mỗi đội, tính số bài đúng và số điểm phạt, cập nhật kết quả tối ưu và lưu thông tin đội mạnh nhất.
3. code tham khảo BCTHIDAU spoj PTIT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | const fi=''; type data=longint; var f:text; S:string; n:data; procedure docfile; var i,j:data; ch:char; s1,s2,s3,s4,t1,t2,t3,t4:data; pointmax,point:data; slmax,sl:data; namemax:string; begin assign(f,fi); reset(f); readln(f,n); slmax:=-1; for i:=1 to n do begin s:=''; while not eoln(f) do begin read(f,ch); if ch<>' ' then s:=s+ch else break; end; readln(f,s1,t1,s2,t2,s3,t3,s4,t4); sl:=0; point:=0; if t1<>0 then begin inc(sl); point:=point+ (s1-1)*20 + t1; end; if t2<>0 then begin inc(sl); point:=point+ (s2-1)*20 + t2; end; if t3<>0 then begin inc(sl); point:=point+ (s3-1)*20 + t3; end; if t4<>0 then begin inc(sl); point:=point+ (s4-1)*20 + t4; end; if sl>slmax then begin namemax:=s; slmax:=sl; pointmax:=point; end else if (sl=slmax) and (pointmax>point) then begin namemax:=s; slmax:=sl; pointmax:=point; end; end; write(namemax,' ',slmax,' ',pointmax); close(f); end; begin docfile; end. |
Bài viết liên quan
- P156SUME spoj PTIT – ROUND 6E – Ước chung của chuỗi
- P156SUMH spoj PTIT – ROUND 6H – Kim cương
- P153PROI PTIT spoj – Mã hóa xâu
- FINDCOW PTIT spoj – Find the Cow!
- PTIT016E spoj PTIT – ACM PTIT 2016 E – Kỳ thi ACM/ICPC
- Spoj PTIT PTIT016C – ACM PTIT 2016 C – Chẵn lẻ
- P156PROE spoj PTIT – ROUND 6E – Phép dịch
- PTIT013K spoj PTIT – SỐ NGUYÊN HỆ CƠ SỐ ACM
- PTIT013A spoj PTIT – Số may mắn
- P147PROB spoj PTIT – Pha nước cam