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(); })); }); }
/// <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; } }