ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1201. Which Day Is It?

WA#6 ?? I can't understand !!
Posted by FireHeart 21 Jul 2007 08:47
Here is my code :
{$M 16777216}
Program P1201_Which_day_is_it;
{$APPTYPE CONSOLE}
Var Days:array [1600..2400] of byte;
    fday,day,sum,month:byte;
    year:word;
    i,j,k,h,d,code:integer;
    s,t:string;
    Calendar:array[1..7] of string;
{-----------------------------------------------------------}
Procedure Init;
Begin
  Days[1600]:=2;
  i:=1601;
  While i<=year do
    Begin
      days[i]:=days[i-1];
      if (i-1) mod 4 =0 then inc(days[i]);
      if i-1=1918 then inc(days[i]);
      inc(days[i]);
      if days[i]>7 then days[i]:=days[i] mod 7;
      inc(i);
    end;
End;
{-----------------------------------------------------------}
Begin
 {$IFNDEF ONLINE_JUDGE}
 Assign(input,'Input.txt'); Reset(input);
 Assign(output,'Output.txt'); Rewrite(output);
 {$ENDIF}
 Readln(input,day,month,year);
 init; fday:=days[year];
 For i:=1 to month-1 do
   Begin
     if (i=1)or(i=3)or(i=5)or(i=7)or(i=8)or(i=10) then inc(fday,3);
     if (i=2) then
       if year mod 4 = 0 then inc(fday,1);
     if (i=4)or(i=6)or(i=9)or(i=11)or(i=12) then inc(fday,2);
   End;
 if (month=1)or(month=3)or(month=5)or(month=7)or(month=8)or(month=10) then
   sum:=31;
 if (month=2) then if (year mod 4=0) then sum:=29 else sum:=28;
 if (month=4)or(month=6)or(month=11)or(month=12) then sum:=30;
 Calendar[7]:='sun'; Calendar[1]:='mon'; Calendar[2]:='tue';
 Calendar[3]:='wed'; Calendar[4]:='thu'; Calendar[5]:='fri';
 Calendar[6]:='sat';
 if fday>7 then fday:=fday mod 7;
 for i:=fday-1 downto 1 do Calendar[i]:=Calendar[i]+'     ';
 k:=fday;
 for i:=1 to sum do
   begin
     if i=day then s:=']' else s:=' ';
     str(i,t); if length(t)=1 then t:=' '+t; s:=t+s;
     if i=day then s:='['+s;
     while length(s)<5 do s:=' '+s;
     Calendar[k]:=Calendar[k]+s;
     if k=7 then k:=1 else inc(k);
   end;
 For i:=1 to 7 do
   Begin
     While Calendar[i][length(calendar[i])]=' ' do
       delete(Calendar[i],Length(calendar[i]),1);
     writeln(output,Calendar[i]);
   End;
 {$IFNDEF ONLINE_JUDGE}
 Close(input);
 Close(output);
 {$ENDIF}
End.

My code have WA#6, but I think it alright !!
Re: WA#6
Posted by melkiy 27 Apr 2009 01:43
No 1918 or 1752 calendar corrections must be taken into account. Do just what is asked in the condition.