>甘晴void:小蒟蒻的CCSP2024

news2024/10/25 23:01:54

小蒟蒻前两天参加了CCSP2024

最终幸运蹭铜(蹭着本科的边边捞到了铜牌,没有遗憾了)。

评价感受

本来只是来打酱油(蹭吃蹭喝)的,因为自从推免结束后,已经正好一个月没碰代码了,上一次碰代码还是参加某学校的机考。但是编程这个东西很神奇,不管你多久没碰代码,一看到题目就突然会了,还是能比划比划的。于是上来20分钟直接贪心算法(我不会别的算法了),先AC了第一道题。之后又试了试贝壳统计,发现前10个点数据量很小,并且操作简单,完全可以暴力解决,故一番尝试之后先把这题拿了40分。

此时时间过去了一个半小时,我又看了看数树,发现这道题逻辑很清晰,三个层次的数据点,前两个层次只要把树模拟出来就可以很轻易地得分,故我就先拿到了这55分。此时已经12点过了,比赛过了3小时,拿到了195分。

正好吃一下午饭,收拾收拾心情。午饭没有拍照(没有手机),但感觉还是可以的,盒饭,还发了个香蕉。午饭结束后我感觉数树的后面45分有个旋转,当时潜意识里感觉没那么容易,于是就先放一放。开始开系统题(也就是超级大模拟),这一开不要紧,直接写了4个小时的bitTorent服务器,要求实现接受6个指令并做出反应,我感觉最低的得分门槛大概涵盖了70%的工作量,但只有30分,但一旦实现了这个最低门槛,再往上拿分就比较容易了。很遗憾,我写了四个小时没有写出来,没有通过这个最低门槛。后来看到似乎这个最低门槛还是与未要求的指令有关系,这个就不知道了。中途又对贝壳统计改进了又交了一发还是没有提升。此时已经到了晚上五点半,天黑了。等于是我一个下午一分都没有拿,心态有点炸。打开排行榜一看,发现自己已经掉出了铜奖线,遂没有什么别的想法,开始摆烂。正好又来了盒饭,故事已至此,先吃饭吧。

边吃饭边看前面的题目,想再捞点分。发现数树的最后一部分其实还好,没有想象的那么难。边吃边想,想的差不多了就看最后一道系统题,发现前两个得分点还是比较简单的。遂定下方针,先把数树拿到,再最后一道系统题捞20分,就是赚了。如果这个策略能成真,那估计就有260,可能有铜奖了。

饭后敲了半个小时,直接提交,数树AC了,此时已经六点半了,我AC了第二道题。这45分一加,效果很显著,直接跳到了铜奖中间的位置,240分。

然后做最后一道系统题,本来以为能捞20分的,结果只拿到10分,此时已经七点了,先尝试找bug,找了半个小时没找到,又试试别的题,之后就没有任何进展了。

临结束的时候交了一发贝壳统计,换了一种思路,当时没立刻出结果,后来看到还是TLE,那就没办法了,就这样吧。事后发现,如果这个拿满,还是可能银牌的,呵呵。

全过程跌宕起伏吧,从一开始的无所谓,到发现自己还是有点希望的,再到跌出铜奖线,开始摆烂,然后又绝处逢生,再到最后实在找不出bug了,就这样潦草画上句点。

总的来说我还是非常幸运的。感谢勇于尝试的自己。

金银铜奖情况

金奖靠前ranklist(全都是大佬)

第一名是在封榜前AK的,真的是非常厉害

金奖线(365)

银奖线(300)

铜奖线(240靠前)

只有时间较早拿到240的同学才有铜奖

题目与解答

部分题目不会,没答上来。

第1题

AC代码:

#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;

int main()
{
	int n;
    priority_queue<int, vector<int>, greater<int>> q;
    cin>>n;
    for (int i=0;i<n;i++)
    {
        int temp;
        cin>>temp;
        q.push(temp);
    }
    int t1=0,t2=0;
    bool flag1,flag2;
    while(!q.empty())
    {
        // cout<<q.top();
        // q.pop();
        int now = q.top();
        q.pop();
        if (t2<t1)
        {
            if (now > t2) t2=now+10;
            else t2+=10;
        }
        else{
            if (now > t1) t1=now+10;
            else t1+=10;
        }
    }
    if (t1>t2) swap(t1,t2);
    cout<<t1<<" "<<t2<<endl;
    return 0;
}

 第2题

样例:

数据点:

40分代码(仅完成1-10数据点):

#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
#include<cstring>
#include<map>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
	int n,m;
    cin>>n>>m;
    vector<int> v;
    for (int i=0;i<n;i++)
    {
        int temp;
        cin>>temp;
        v.push_back(temp);
    }
    if (n<=10000 && m<=10000)
    {
        while(m--)
        {
            int op,a,b;
            cin>>op>>a>>b;
            if (op==1)
            {
                int sum = 0;
                // set<int> s;
                // for (int i=a-1; i<=b-1; i++)
                // {
                //     int now = v[i];
                //     if (s.find(now) == s.end())
                //     {
                //         sum++;
                //         s.insert(now);
                //     }
                // }
                bool ntemp[20000];
                memset(ntemp,0,sizeof(ntemp));
                for (int i=a-1; i<=b-1; i++)
                {
                    int now = v[i];
                    if (ntemp[now] == 0)
                    {
                        sum++;
                        ntemp[now] = 1;
                    }
                }
                cout<<sum<<endl;
            }
            else if (op==2)
            {
                v[a-1] = b;
            }
            else
            {
                v.insert(v.begin()+a, b);
            }
        }
    }
    else{
        map<int,vector<int>> mp;
        bool ntemp[200000];
        memset(ntemp,0,sizeof(ntemp));
        for (int i=0; i<n; i++)
        {
            if (ntemp[v[i]] == 0)
            {
                ntemp[v[i]] = 1;
            }
            else{
                vector<int> temp;
                for (int j=0; j<mp[v[i]].size(); j++) {
                temp.push_back(mp[v[i]][j]);
                mp[v[i]].push_back(mp[v[i]][j]);}
                for (auto x : temp) mp[x].push_back(v[i]);
            }
        }
        while(m--)
        {
            int op,a,b;
            cin>>op>>a>>b;
            if (op==1)
            {
                int sum = 0;
                for (auto x : mp)
                {
                    int count = 0;
                    if (x.first>=a && x.first<=b)
                    {
                        for (auto y : x.second)
                        {
                            if (y>=a && y<=b) count++;
                        }
                    }
                    count /= 2;
                    count --;
                    sum+=count;
                }
                cout<<b-a+1-sum<<endl;
            }
            else if (op==2)
            {
                v[a-1] = b;
            }
            else
            {
                v.insert(v.begin()+a, b);
            }
        }
    }
    return 0;
}

第3题

样例:

AC代码:

#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;

struct node
{
    int data;
    int parent;
    vector<int> child;
};

int findnum(vector<node> &list, int u, int v)
{
    int ret = 0;
    if (list[u].child.empty())
    {
        if (list[u].data > v) ret = 1;
        return ret;
    }
    else{
        for(int i=0; i<list[u].child.size(); i++)
        {
            ret += findnum(list,list[u].child[i],v);
        }
        if (list[u].data > v) ret += 1;
        return ret;
    }
}

int findmax(vector<node> &list, int u)
{
    int maxnum = 0;
    if (list[u].child.empty())
    {
        maxnum = max(list[u].data, maxnum); 
        return maxnum;
    }
    else{
        for(int i=0; i<list[u].child.size(); i++)
        {
            maxnum = max(maxnum, findmax(list,list[u].child[i]));
        }
        return max(maxnum, list[u].data);
    }
}

void findmin(vector<node> &list, int u, int& minvalue, int& minnum)
{
    if (!list[u].child.empty())
    {
        for(int i=0; i<list[u].child.size(); i++)
        {
            findmin(list, list[u].child[i], minvalue, minnum);
        }
    }
    if (list[u].data < minvalue)
    {
        minnum = u;
        minvalue = list[u].data;
    }
    else if (list[u].data == minvalue && u<minnum)
    {
        minnum = u;
        minvalue = list[u].data;
    }
    return;
}

void rotate(vector<node> &list, int u)
{
    if (list[u].parent == -1) return;
    rotate(list, list[u].parent);
    int parentnum = list[u].parent;
    auto childpos = find(list[parentnum].child.begin(), list[parentnum].child.end(), u);
    list[parentnum].child.erase(childpos);
    list[parentnum].parent = u;
    list[u].parent = -1;
    list[u].child.push_back(parentnum);
    return;
}

int main()
{
	int n,m;
    cin>>n;
    vector<node> list;
    for (int i=0;i<n; i++)
    {
        node newnode;
        newnode.parent = -1;
        list.push_back(newnode);
    }
    for (int i=0;i<n-1;i++)
    {
        int u,v;
        cin>>u>>v;
        u--;
        v--;
        list[u].child.push_back(v);
        list[v].parent = u;
    }
    for (int i=0; i<n; i++)
    {
        int temp;
        cin>>temp;
        list[i].data = temp;
    }

    cin>>m;
    int last = 0;
    while(m--)
    {
        int DEBUG =0;
        if (DEBUG)
        {
            cout<<endl;
            for (int i=0; i<list.size(); i++)
            {
                cout<<"index = "<<i<<" value = "<<list[i].data<<" | ";
                for (int j=0; j<list[i].child.size(); j++) cout<<list[i].child[j]<<" ";
                cout<<endl;
            }
        }
        int op;
        cin>>op;
        if (op == 1)
        {
            int u,v;
            cin>>u>>v;
            u ^= last;
            v ^= last;
            u--;
            last = findnum(list,u,v);
            cout<<last<<endl;
        }
        else if (op == 2)
        {
            int u,v;
            cin>>u>>v;
            u ^= last;
            v ^= last;
            u--;
            list[u].data = v;
        }
        else if (op == 3)
        {
            int u,v;
            cin>>u>>v;
            u ^= last;
            v ^= last;
            u--;
            int now = list.size();
            node newnode;
            list.push_back(newnode);
            list[now].data = v;
            list[u].child.push_back(now);
            list[now].parent = u;
        }
        else if (op == 4)
        {
            int u,v;
            cin>>u;
            u ^= last;
            u--;
            int parent = list[u].parent;
            list[parent].child.erase(find(list[parent].child.begin(),list[parent].child.end(),u));
            list[u].parent = -1;
            last = findmax(list,u);
            cout<<last<<endl;
        }
        else if (op == 5)
        {
            int u,v;
            cin>>u;
            u ^= last;
            u--;
            int minvalue = 9999999;
            int minnum = 99999;
            findmin(list, u, minvalue, minnum);
            last = minnum + 1;
            cout<<last<<endl;
        }
        else if (op == 6)
        {
            int u,v;
            cin>>u;
            u ^= last;
            u--;
            rotate(list,u);
        }

    }
    
    return 0;
}

第4题

题面太长,不放了。

数据点:

10分代码(只完成数据点1):

#include<bits/stdc++.h>
#include<cstring>
#include<string>
using namespace std;

// CREATE_Proc pid load
// DESTROY_Thread tid
// CREATE_Thread pid tid load
// SCHEDULE_OPT

map<int,int> tidref;

struct pnode
{
    int pid;
    int load;
    map<int,int> threadlist;
};

map<int,pnode> plist;

int main()
{
    int n;
    cin>>n;

    getchar();
    while (n--)
    {
        string str;
        getline(cin,str);
        stringstream ss;
        ss << str;
        string op;
        vector<string> envlist;
        ss >> op;
        string temp;
        while(ss >> temp)
        {
            envlist.push_back(temp);
        }
        
        if (op == "CREATE_Proc")
        {
            // CREATE_Proc pid load
            int pid = stoi(envlist[0]);
            int load = stoi(envlist[1]);

            if (plist.find(pid) != plist.end()) continue;
            pnode newnode;
            newnode.pid = pid;
            newnode.load = load;
            newnode.threadlist.insert(make_pair(pid,load));
            tidref.insert(make_pair(pid,pid));
            plist.insert(make_pair(pid,newnode));
        }
        else if (op == "CREATE_Thread")
        {
            // CREATE_Thread pid tid load
            int pid = stoi(envlist[0]);
            int tid = stoi(envlist[1]);
            int load = stoi(envlist[2]);
            
            if (plist.find(tid) != plist.end()) continue;
            auto pos = plist.find(pid);
            if (pos != plist.end())
            {
                pos->second.threadlist.insert(make_pair(tid,load));
                tidref.insert(make_pair(tid,pid));
            }
        }
        else if (op == "DESTROY_Thread")
        {
            // DESTROY_Thread tid
            int tid = stoi(envlist[0]);

            if (tidref.find(tid) == tidref.end()) continue;
            int pid = tidref[tid]; 
            plist[pid].threadlist.erase(tid);
            tidref.erase(tid);
            if (plist[pid].threadlist.empty())
            {
                plist.erase(pid);
            }
        }
        else if (op == "SCHEDULE_OPT")
        {
            // SCHEDULE_OPT
            for (auto x : plist)
            {
                for (auto y : x.second.threadlist)
                {
                    cout<<"Process (PID): "<<x.first<<" Thread(Tid): "<<y.first<<" Load: "<<y.second<<endl;
                }
            }
            cout<<"Contention Cost: 0"<<endl;
        }
    }
    return 0;
}

第5题

题面太长,不放了。这道题足足写了4个小时,但还是0分,很难受。

数据点:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2223615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DeepLearn-实现天气的识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 本次使用的数据集有晴天、雨天、多云和日出。 导入基本的包 包括读取文件、图像处理、科学计算和tensorflow的api包layers是层模块&#xff0c;提供了神经网络…

[bug] vllm 0.6.1 RuntimeError: operator torchvision::nms does not exist

[bug] vllm 0.6.1 RuntimeError: operator torchvision::nms does not exist 环境 python 3.10 torch 2.4.0cu118 torchvision 0.19.0cu118 vllm 0.6.1.post2cu118问题详情 if torch._C._d…

利用客户端导入有关联的业务数据(DBeaver+sql)

前言 最近有点坑&#xff0c;麻辣烫的活落手上了&#xff0c;上个迭代除了自己的开发任务&#xff0c;还有处理接手的工作。然后节后问题又多&#xff0c;还有前1个迭代没有测试的模块本迭代测试&#xff0c;烦死了。 这次这个数据处理的活&#xff0c;以后希望可以交出…

香橙派5(RK3588)使用npu加速yolov5推理的部署过程

香橙派5使用npu加速yolov5推理的部署过程 硬件环境 部署过程 模型训练(x86主机) 在带nvidia显卡(最好)的主机上进行yolo的配置与训练, 获取最终的best.pt模型文件, 详见另一篇文档 模型转换(x86主机) 下载airockchip提供的yolov5(从pt到onnx) 一定要下这个版本的yolov5, …

docker集成Nginx和Mysql (教程)

文章目录 前言一、Docker 集成Nginx步骤 1&#xff1a;安装 Docker步骤 2&#xff1a;拉取官方的 Nginx Docker 镜像1.可以先搜索nginx镜像(查看nginx镜像)2.拉取nginx镜像步骤 3&#xff1a;运行 Nginx 容器 二、Docker 集成Mysql步骤 1&#xff1a;拉取mysql镜像步骤2、运行 …

Vulnhub打靶-DC-1

基本信息 靶机下载&#xff1a;https://download.vulnhub.com/dc/DC-1.zip 攻击机器&#xff1a;192.168.20.128&#xff08;Windows操作系统&#xff09;& 192.168.20.138&#xff08;kali&#xff09; 靶机&#xff1a;192.168.20.0/24 目标&#xff1a;获取2个flag…

SQL 干货 | SQL 半连接

大多数数据库开发人员和管理员都熟悉标准的内、外、左和右连接类型。虽然可以使用 ANSI SQL 编写这些连接类型&#xff0c;但还有一些连接类型是基于关系代数运算符的&#xff0c;在 SQL 中没有语法表示。今天我们将学习一种这样的连接类型&#xff1a;半连接&#xff08;Semi …

tensorflow案例3--运动鞋识别(学习tensorflow动态加载学习率、如何设置早停等方法)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 这个案例还是以学习API为主&#xff0c;学习了tensorflow如何动态加载学习率、如何设置早停等方法&#xff1b;这个案例主要学习为主&#xff0c;由于模…

SpringBoot 集成RabbitMQ 实现钉钉日报定时发送功能

文章目录 一、RabbitMq 下载安装二、开发步骤&#xff1a;1.MAVEN 配置2. RabbitMqConfig 配置3. RabbitMqUtil 工具类4. DailyDelaySendConsumer 消费者监听5. 测试延迟发送 一、RabbitMq 下载安装 官网&#xff1a;https://www.rabbitmq.com/docs 二、开发步骤&#xff1a;…

Python 实现彩票抽奖系统详解(双色球)

目录 一、系统功能概述 二、代码实现详解 &#xff08;一&#xff09;自选功能实现&#xff08;ziXuanCaiPiao函数&#xff09; &#xff08;二&#xff09;机选功能实现&#xff08;autoChoiceCaiPiao函数&#xff09; &#xff08;三&#xff09;彩票展示功能实现&#x…

如何解决 IDEA 的 pom.xml 文件中,依赖警告问题

原因 在升级高版本的Idea后&#xff0c;我的是&#xff08;2024.2&#xff09;版本。Idea默认引入了插件 Package Checker 插件&#xff0c;用于检查 Maven 的 pom.xml 引入的 jar 包是否有漏洞风险。如果有漏洞风险则直接在引入的 pom.xml 下画黄线警告。 虽然不是错误&…

Tkinter -- python GUI学习与使用

前言 python GUI 目前pythonGUI有很多&#xff0c;哪一个最好&#xff1f; 先说说我选择的思路&#xff0c;我的目的是开发一个易用的软件&#xff0c;最重要的是稳定&#xff0c;并且碰到问题能够解决&#xff0c;因此&#xff0c;我的目标很明确&#xff0c;有比较大的用户群…

杂项笔记

1 这个好像如果如果分配空间就会执行 这个扩容好像会进行拷贝 2 3 4 没懂 5

【数据结构与算法】走进数据结构的“时间胶囊”——栈

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 引言 一.栈的基本概念 1.1 定义 1.2 特性 1.3 基本操作 二.栈的实现方式 2.1 顺序栈 2.2 链栈 三.顺序栈的实现 定义顺序栈的结构 初始化 入栈 检查栈是否为空 出栈 销毁 四.链栈的实现 定义链栈的结构 初始…

未来汽车驾驶还会有趣吗?车辆动力学系统简史

未来汽车驾驶还会有趣吗&#xff1f;车辆动力学系统简史 本篇文章来源&#xff1a;Schmidt, F., Knig, L. (2020). Will driving still be fun in the future? Vehicle dynamics systems through the ages. In: Pfeffer, P. (eds) 10th International Munich Chassis Symposiu…

数字图像处理的概念(一)

一 何谓数字图像处理 1 图像的概念 图像是对客观存在的物体的一种相似性的、生动的写真或描述。 2 图像的类别 可见光成像和不可见光成像 单波段、多波段和超波段图像 伽马射线成像 主要用途包括核 医学和天文观测 等 。 核医学 a)同位素注射 骨骼扫描图像 b)正电子放射( …

【Docker】安装、镜像、容器

什么是Docker&#xff1f; Docker&#xff1a;是基于Go语言实现的开源项目。 Docker 是一个用于开发、交付和运行应用程序的开放平台。它允许开发人员将应用程序及其依赖包打包到一个可移植的容器中&#xff0c; 然后在任何流行的 Linux 机器上运行。Docker 容器是完全隔离的&…

Openpyxl--学习记录

1.工作表的基本操作 1.1 工作表的新建打开与保存 1.1.1 创建工作簿 from openpyxl import Workbook from pathlib import Pathfile_path Path.home() / "Desktop" / "123.xlsx"# 1.创建工作簿 wb Workbook() # 2.访问默认工作簿 ws wb.active # 3.填充…

pytorh学习笔记——cifar10(六)MobileNet V1网络结构

基础知识储备&#xff1a; 一、深度可分离卷积&#xff08;Depthwise Separable Convolution&#xff09; MobileNet的核心是深度可分离卷积&#xff08;Depthwise Separable Convolution&#xff09;&#xff0c;深度可分离卷积是卷积神经网络&#xff08;CNN&#xf…

低代码开发详解与行业应用指南

低代码开发简化软件开发&#xff0c;助力企业数字化转型。ZohoCreator应用于零售、制造、教育、IT、医疗、房地产等行业&#xff0c;提升效率、降低成本。灵活定价&#xff0c;支持免费试用&#xff0c;助力企业快速实现数字化。 一、低代码开发是什么&#xff1f; 低代码开发…