见右侧「附件下载」中的 `ex_data2.in/out`。 ## 数据范围与约定 - 对于 $50\%$ 的数据,【替换此处】。 - 对于 $100\%$ 的数据,【替换此处】。 如有,在此处填写其他于题意或数据相关的说明。 EOD; $new_problem_form = new UOJForm('new_problem'); $new_problem_form->handle = function () use ($default_statement) { DB::insert([ "insert into problems", "(title, uploader, is_hidden, submission_requirement, extra_config)", "values", DB::tuple(["New Problem", Auth::id(), 1, "{}", "{}"]) ]); $id = DB::insert_id(); DB::insert([ "insert into problems_contents", "(id, statement, statement_md)", "values", DB::tuple([ $id, HTML::purifier()->purify(HTML::parsedown()->text($default_statement)), $default_statement, ]) ]); dataNewProblem($id); redirectTo("/problem/{$id}/manage/statement"); die(); }; $new_problem_form->config['submit_container']['class'] = ''; $new_problem_form->config['submit_button']['class'] = 'bg-transparent border-0 d-block w-100 px-3 py-2 text-start'; $new_problem_form->config['submit_button']['text'] = ' 新建本地题目'; $new_problem_form->config['confirm']['text'] = '你真的要添加新题吗?'; $new_problem_form->runAtServer(); } function getProblemTR($info) { $problem = new UOJProblem($info); $html = HTML::tag_begin('tr', ['class' => 'text-center']); $html .= HTML::tag('td', ['class' => $info['submission_id'] ? 'table-success' : ''], "#{$info['id']}"); $html .= HTML::tag_begin('td', ['class' => 'text-start align-middle']); $html .= $problem->getLink(['with' => 'none']); if ($problem->isUserOwnProblem(Auth::user())) { $html .= ' ' . UOJLocale::get('problems::my problem') . ' '; } if ($info['type'] == 'remote') { $html .= ' ' . HTML::tag('a', ['class' => 'badge text-bg-success align-middle', 'href' => '/problems/remote'], '远端评测题'); } if ($info['is_hidden']) { $html .= ' ' . UOJLocale::get('hidden') . ' '; } if (isset($_COOKIE['show_tags_mode'])) { echo HTML::tag_begin('span', ['class' => 'float-end']); foreach ($problem->queryTags() as $tag) { $html .= ' ' . '' . HTML::escape($tag) . '' . ' '; } echo HTML::tag_end('span'); } $html .= HTML::tag_end('td'); if (isset($_COOKIE['show_submit_mode'])) { $perc = $info['submit_num'] > 0 ? round(100 * $info['ac_num'] / $info['submit_num']) : 0; $html .= HTML::tag( 'td', [ 'class' => 'align-middle', ], HTML::tag( 'div', [ 'class' => 'progress h-100', 'data-bs-toggle' => 'tooltip', 'data-bs-title' => "{$info['ac_num']} / {$info['submit_num']}", 'data-bs-placement' => 'bottom', ], HTML::tag('div', [ 'class' => 'progress-bar bg-success', 'role' => 'progressbar', 'aria-valuenow' => $perc, 'aria-valuemin' => 0, 'aria-valuemax' => 100, 'style' => "width: {$perc}%; min-width: 20px;", ], "{$perc}%") ) ); } $html .= HTML::tag('td', [], $problem->getDifficultyHTML()); $html .= HTML::tag('td', [], ClickZans::getCntBlock($problem->info['zan'])); $html .= HTML::tag_end('tr'); return $html; } $cond = []; $search_tag = UOJRequest::get('tag', 'is_string', null); $search_content = UOJRequest::get('search', 'is_string', ''); $search_is_effective = false; $cur_tab = UOJRequest::get('tab', 'is_string', 'all'); if ($cur_tab == 'template') { $search_tag = "模板题"; } else if ($cur_tab == 'remote') { $cond['type'] = 'remote'; } if (is_string($search_tag)) { $cond[] = [ DB::rawvalue($search_tag), "in", DB::rawbracket([ "select tag from problems_tags", "where", ["problems_tags.problem_id" => DB::raw("problems.id")] ]) ]; } if ($search_content !== '') { foreach (explode(' ', $search_content) as $key) { if (strlen($key) > 0) { $cond[] = DB::lor([ [DB::instr(DB::raw('title'), $key), '>', 0], DB::exists([ "select tag from problems_tags", "where", [ [DB::instr(DB::raw('tag'), $key), '>', 0], "problems_tags.problem_id" => DB::raw("problems.id") ] ]), "id" => $key, ]); $search_is_effective = true; } } } if (isset($_GET['is_hidden'])) { $cond['problems.is_hidden'] = true; } if (Auth::check() && isset($_GET['my'])) { $cond['problems.uploader'] = Auth::id(); } if (isset($_GET['min_difficulty']) && $_GET['min_difficulty']) { $cond[] = ['problems.difficulty', '>=', $_GET['min_difficulty']]; } if (isset($_GET['max_difficulty']) && $_GET['max_difficulty']) { $cond[] = ['problems.difficulty', '<=', $_GET['max_difficulty']]; } if (empty($cond)) { $cond = '1'; } $header = ''; $header .= 'ID'; $header .= '' . UOJLocale::get('problems::problem') . ''; if (isset($_COOKIE['show_submit_mode'])) { $header .= '' . UOJLocale::get('problems::ac ratio') . ''; } $header .= '' . UOJLocale::get('problems::difficulty') . ''; $header .= '' . UOJLocale::get('appraisal') . ''; $header .= ''; $tabs_info = [ 'all' => [ 'name' => UOJLocale::get('problems::all problems'), 'url' => "/problems" ], 'template' => [ 'name' => UOJLocale::get('problems::template problems'), 'url' => "/problems/template" ], 'remote' => [ 'name' => UOJLocale::get('problems::remote problems'), 'url' => "/problems/remote" ], ]; $pag = new Paginator([ 'col_names' => ['*'], 'table_name' => [ "problems left join best_ac_submissions", "on", [ "best_ac_submissions.submitter" => Auth::id(), "problems.id" => DB::raw("best_ac_submissions.problem_id") ], ], 'cond' => $cond, 'tail' => "order by id asc", 'page_len' => 50, 'post_filter' => function ($problem) { return (new UOJProblem($problem))->userCanView(Auth::user()); } ]); // if ($search_is_effective) { // $search_summary = [ // 'count_in_cur_page' => $pag->countInCurPage(), // 'first_a_few' => [] // ]; // foreach ($pag->get(5) as $info) { // $problem = new UOJProblem($info); // $search_summary['first_a_few'][] = [ // 'type' => 'problem', // 'id' => $problem->info['id'], // 'title' => $problem->getTitle() // ]; // } // DB::insert([ // "insert into search_requests", // "(created_at, remote_addr, type, cache_id, q, content, result)", // "values", DB::tuple([DB::now(), UOJContext::remoteAddr(), 'search', 0, $search_content, UOJContext::requestURI(), json_encode($search_summary)]) // ]); // } ?>

pagination() ?>
/>
/>
get(), [ 'table_attr' => [ 'class' => ['table', 'uoj-table', 'mb-0'], ], 'tr' => function ($row, $idx) { return getProblemTR($row); } ]); ?>
pagination() ?>