[游记] 天山4月欢乐赛

前言:这欢乐赛一点也不欢乐。

Day 0 0409

开心了开心了,机房月赛晚自习没了。三科作业一如既往地没写。18:23下楼拿了个杯子就到了机房。一开始是四道题,后来不知道为什么Booo加了一道题。

18:30开始。第一题是洛谷原题 轰炸\(III\),由于代码年久失修所以调了一下才过。第二题是烦恼的高考志愿P1678改的,只改了题目背景,可怜的fupeixin,以及孔老师。也是不长时间秒了。随后到了第三题,简单一看就是进制转换和判断回文问题。10多分钟秒了。

随后第四题不会写就开始随机数尝试A第五题。因为其答案是1~7间的任意一个整数。

首先是rand的随机数生成器,但是比较劣质,在很短的时间间隔内只会输出一个数字。

#include<bits/stdc++.h>
int main() {
    srand(time(NULL));
    int random_num = (rand() % 7) + 1;
    printf("%d\n", random_num);
    return 0;
}

这是一开始的代码,最高分仅有28分(一个点14~15分)。随后我测试了样例情况,没有输出3的情况,所以写了一个比较优质的随机数,用了mt19937

#include <iostream>
#include <random>
#include <unordered_set>
#include <vector>

int main() {
    std::vector<int> numbers = {1, 2, 4, 5, 6};
    std::unordered_set<int> generated;
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(0, numbers.size() - 1);
    while (generated.size() < numbers.size()) {
        int index = dis(gen);
        int randomNumber = numbers[index];
        if (generated.find(randomNumber) == generated.end()) {
            std::cout << randomNumber << std::endl;
            return 0;
        }
    }

    return 0;
}    

这下就好了,44分。别问,问就是豆包写的。

然后就开始刷,却从来没有上过50分的情况。于是开始想办法,用了一个shuffle打乱。

#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
using namespace std;
int main() {
    vector<int> numbers = {1, 2, 4, 5, 6};
    random_device rd;
    mt19937 g(rd());
    shuffle(numbers.begin(), numbers.end(), g);
    shuffle(numbers.begin(), numbers.end(), g);
    for (int num : numbers) {
        cout<< num << endl;
        return 0;
    }

    return 0;
}    

这下更好了,57和71分的情况都出来了。放一下71分的记录(已经被老师取消了,得亏截图了)

很极限的情况。后面再也没出来过。

这么也不是办法就开始打模拟,在比赛结束2秒后取得了100分的成绩。(记录还是进成绩表了)

https://hydro.ac/d/TS23/record/67f66f52dd52e7d7e5daf396

然后简单讲了一下结束了。第二400,可惜没有人AK

posted @ 2025-04-10 10:02  小东抢击侠  阅读(45)  评论(1)    收藏  举报