挖土机周赛 Round 32(语法场)
已结束
乐多
开始于: 2024-11-15 19:00
2
小时
主持人:
122
Round 31 起挖土机周赛规则
“语法周赛”改名为“挖土机周赛”,将分为三个等级:语法场、入门场、提高场
考纲
入门场和提高场的考纲设置参考 NOI 大纲 的入门级和提高级对应的考点。
语法场的考纲基于 NOI 大纲有筛选,仅保留语法阶段内容,详细见:挖土机周赛语法场考纲
赛制
采用乐多赛制、灵活时间模式限时两小时。
- 乐多赛制下,选手可以多次提交一道题目,并获得实时评测结果。
- 乐多赛制下,多次提交会导致选手的得分被扣除,排行榜将显示用户的最高得分。
- 乐多赛制下,每道题的最终得分为:。 分别代表本次得分和本次提交前的尝试次数。
- 乐多排名规则为:按照如上规则折算后的分数从高到低排名。
- 灵活时间模式下,比赛开放时间期限内你可以任选开始时间,开始之后你需要在最多 2 小时内完成比赛,如果在那之前比赛结束了,那么你也将无法作答。
挖土机学员奖励
每场比赛对挖土机学员发放至少 硬币的奖励,分配规则如下(以下名次指挖土机学员中排名):
- 排名在 至 名的每人 硬币。
- 排名在 至 名的每人 硬币。
- 第 名及以后,所有有分数的同学,发放 个幸运奖,每个幸运奖 硬币,共 硬币。
幸运奖分配规则:按得分为权重(分数越高抽到的概率越大),使用随机数代码直播抽出。
抽奖代码(DevC++ 下、-std=c++14 -O2
运行)
// 最暴力的抽奖代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000;
int n, m;
int id[MAXN + 5]; // 编号
int score[MAXN + 5]; // 成绩
string seedS;
mt19937 rnd;
void chou()
{
int sum = 0;
for (int i = 1; i <= n; i++)
sum += score[i];
int x = rnd() % sum;
for (int i = 1; i <= n; i++)
{
if (x < score[i])
{
cout << id[i] << " ";
for (int j = i; j <= n - 1; j++)
{
id[j] = id[j + 1];
score[j] = score[j + 1];
}
n--;
break;
}
else
x -= score[i];
}
}
int main()
{
cout << "最后一次提交的记录地址:";
cin >> seedS;
unsigned seed = 0;
for (int i = 0; i < seedS.size(); i++)
seed = seed * 128 + seedS[i];
rnd.seed(seed);
cout << "总人数:";
cin >> n;
cout << "抽奖人数:";
cin >> m;
assert(m <= n);
cout << "每个人得分:\n";
for (int i = 1; i <= n; i++)
{
id[i] = i;
cin >> score[i];
}
for (int i = 1; i <= n; i++)
cout << id[i] << ":" << score[i] << "\n";
for (int i = 1; i <= m; i++)
chou();
return 0;
}
线下参赛规则
可以咨询对应教务老师本周能否在校区线下参赛。线下参赛没有额外奖励。
赛后数据下载及补题
本场比赛采用灵活时间模式,你需要在参加后的指定时间内完成比赛。
- 状态
- 已结束
- 规则
- 乐多
- 题目
- 4
- 开始于
- 2024-11-15 19:00
- 结束于
- 2024-11-17 22:00
- 持续时间
- 2 小时
- 主持人
- 参赛人数
- 122