Exemple #1
0
        public void Refresh(int tmp)
        {
            var contest = App.Server.GetContest(contest_id);

            Type = contest.Type;
            Dispatcher.Invoke(new Action(() => {
                if (Type != Entity.ContestType.Codeforces)
                {
                    btnLock.Visibility = Visibility.Collapsed;
                }
                else
                {
                    btnLock.Visibility = Visibility.Visible;
                }
            }));
            System.Threading.Tasks.Task.Factory.StartNew(() => {
                var list                 = from id in App.Server.GetProblemList(contest_id)
                                   let q = App.Server.GetProblemTitle(id)
                                           select new ProblemListBoxItem
                {
                    Title        = q.Title,
                    Status       = q.Status,
                    Time         = q.Time,
                    TimeLimit    = q.TimeLimit,
                    MemoryLimit  = q.MemoryLimit,
                    SpecialJudge = q.SpecialJudge,
                    ProblemID    = q.ProblemID,
                    Points       = q.Points
                };
                char i = 'A';
                Dispatcher.Invoke(new Action(() =>
                {
                    ProblemListBoxItems.Clear();
                    foreach (var item in list)
                    {
                        item.Number = i++;
                        if (App.Server.GetLockStatus(item.ProblemID))
                        {
                            item.Title += " [LOCKED]";
                        }
                        ProblemListBoxItems.Add(item);
                    }
                    ProblemListBox.ItemsSource = ProblemListBoxItems;
                    ProblemListBox.Items.Refresh();
                }));
            });
        }
 public void Refresh(int tmp)
 {
     var contest = App.Server.GetContest(contest_id);
     Type = contest.Type;
     Dispatcher.Invoke(new Action(() => {
         if (Type != Entity.ContestType.Codeforces)
             btnLock.Visibility = Visibility.Collapsed;
         else
             btnLock.Visibility = Visibility.Visible;
     }));
     System.Threading.Tasks.Task.Factory.StartNew(() => {
         var list = from id in App.Server.GetProblemList(contest_id)
                    let q = App.Server.GetProblemTitle(id)
                    select new ProblemListBoxItem
                    {
                        Title = q.Title,
                        Status = q.Status,
                        Time = q.Time,
                        TimeLimit = q.TimeLimit,
                        MemoryLimit = q.MemoryLimit,
                        SpecialJudge = q.SpecialJudge,
                        ProblemID = q.ProblemID,
                        Points = q.Points
                    };
         char i = 'A';
         Dispatcher.Invoke(new Action(() =>
         {
             ProblemListBoxItems.Clear();
             foreach (var item in list)
             {
                 item.Number = i++;
                 if (App.Server.GetLockStatus(item.ProblemID))
                     item.Title += " [LOCKED]";
                 ProblemListBoxItems.Add(item);
             }
             ProblemListBox.ItemsSource = ProblemListBoxItems;
             ProblemListBox.Items.Refresh();
         }));
     });
 }
Exemple #3
0
        /// <summary>
        /// 更新某用户某题的排名元素
        /// </summary>
        /// <param name="user_id"></param>
        /// <param name="problem_id"></param>
        /// <param name="contest_id"></param>
        /// <param name="Type"></param>
        public static void UpdateSingleDetail(int user_id, int problem_id, int contest_id, Entity.ContestType Type)
        {
            using (Dal.DB db = new Dal.DB())
            {
                Entity.StandingDetail detail = new Entity.StandingDetail();
                detail.DisplayFormat = Type;
                switch (Type)
                {
                case Entity.ContestType.OI:
                {
                    var r = Dal.RecordHelper.GetLastRecord(user_id, problem_id);
                    if (r != null)
                    {
                        detail.FirstScore  = r.Score.GetValueOrDefault();
                        detail.SecondScore = r.TimeUsage.GetValueOrDefault();
                    }
                    break;
                }

                case Entity.ContestType.ACM:
                {
                    var r = Dal.RecordHelper.GetFirstAcceptedRecord(user_id, problem_id);
                    if (r != null)
                    {
                        detail.FirstScore = Dal.RecordHelper.GetEffectiveCount(user_id, problem_id, r.SubmissionTime);
                        var BeginTime = (from c in db.Contests
                                         where c.ID == contest_id
                                         select c.StartTime).FirstOrDefault();
                        detail.SecondScore = Convert.ToInt32((r.SubmissionTime - BeginTime).TotalSeconds) + 60 * 20 * (detail.FirstScore - 1);
                    }
                    else
                    {
                        detail.FirstScore  = Dal.RecordHelper.GetEffectiveCount(user_id, problem_id);
                        detail.SecondScore = 0;
                    }
                    break;
                }

                case Entity.ContestType.TopCoder:
                {
                    var r = Dal.RecordHelper.GetLastRecord(user_id, problem_id);
                    if (r != null)
                    {
                        detail.RecordID   = r.ID;
                        detail.ThirdScore = Dal.RecordHelper.GetNoZeroPtsEffectiveCount(user_id, problem_id);
                        if (r.Status == Entity.RecordStatus.Accepted)
                        {
                            int problem_pts = (from p in db.Problems
                                               where p.ID == problem_id
                                               select p.Score).FirstOrDefault();
                            DateTime BeginTime = (from pv in db.ProblemViews
                                                  where pv.ProblemID == problem_id &&
                                                  pv.UserID == user_id
                                                  select pv.Time).FirstOrDefault();
                            int seconds = (int)(r.SubmissionTime - BeginTime).TotalSeconds;
                            int minutes = seconds / 60;
                            detail.FirstScore = Convert.ToInt32(problem_pts * (1 - 0.004 * minutes * minutes)) - 50 * detail.ThirdScore;        //Topcoder动态分数计算公式
                            if (detail.FirstScore < problem_pts * 0.3)
                            {
                                detail.FirstScore = (int)(problem_pts * 0.3);
                            }
                            detail.SecondScore = seconds;
                        }
                    }
                    else
                    {
                        detail.FirstScore  = 0;
                        detail.SecondScore = 0;
                        detail.ThirdScore  = Dal.RecordHelper.GetNoZeroPtsEffectiveCount(user_id, problem_id);
                    }
                    break;
                }

                case Entity.ContestType.Codeforces:
                {
                    var r = Dal.RecordHelper.GetLastRecord(user_id, problem_id);
                    if (r != null)
                    {
                        detail.RecordID   = r.ID;
                        detail.ThirdScore = Dal.RecordHelper.GetNoZeroPtsEffectiveCount(user_id, problem_id);
                        if (r.Status == Entity.RecordStatus.Accepted)
                        {
                            int problem_pts = (from p in db.Problems
                                               where p.ID == problem_id
                                               select p.Score).FirstOrDefault();
                            DateTime BeginTime = (from c in db.Contests
                                                  where c.ID == contest_id
                                                  select c.StartTime).FirstOrDefault();
                            int seconds = (int)(r.SubmissionTime - BeginTime).TotalSeconds;
                            int minutes = seconds / 60;
                            detail.FirstScore = Convert.ToInt32(problem_pts * (1 - 0.004 * minutes)) - 50 * detail.ThirdScore;        //Codeforces动态分数计算公式
                            if (detail.FirstScore < problem_pts * 0.3)
                            {
                                detail.FirstScore = (int)(problem_pts * 0.3);
                            }
                            detail.SecondScore = seconds;
                        }
                    }
                    else
                    {
                        detail.FirstScore  = 0;
                        detail.SecondScore = 0;
                        detail.ThirdScore  = Dal.RecordHelper.GetNoZeroPtsEffectiveCount(user_id, problem_id);
                    }
                    break;
                }
                }
                int userindex = (Standings[contest_id] as List <Entity.StandingItem>).FindIndex(x => x.UserID == user_id);
                (Standings[contest_id] as List <Entity.StandingItem>)[userindex].Details[FindProblem(problem_id, contest_id)] = detail;
            }
        }