2020年十二月ccf-csp认证总结(内附个人题解)

2023-10-31

吐槽一下这个在线评测功能,平均四十分钟才能看到提交结果。。
本次成绩为100+100+0+30+20,最后两道题都是骗的分
在这里插入图片描述

在这里插入图片描述
(提醒自己附代码的神奇图片,希望寒假有时间把没做出来的题目也再做一遍)

csp官网更新出题目后,有路过的可以提醒我把题目加上(也可以随手点个关注啊),以下为个人回忆和csp网站所下载的当时提交的代码:

第一题

在这里插入图片描述

送分题,输入俩数组a[n],b[n],求a[i]*b[i]从1-n的求和

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,i,j;
    cin>>n;
    int w[n],score[n];
    for(i=0;i<n;i++)
    {
        cin>>w[i]>>score[i];
    }
    int sum=0;
    for(i=0;i<n;i++)
    {
        sum+=w[i]*score[i];
    }
    if(sum<0) sum=0;
    cout<<sum<<endl;
}

第二题

HM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0MTA5OTgy,size_16,color_FFFFFF,t_70)
上面的代码是当时考场提交的,与评测网站的样例并不完全相同
评测网站给的样例涉及了相同分数下,有人挂科有人不挂科的情况。。(印象里考场上是没说这点)
可以对照csp网站上的样例1,看看新版本代码的改进在哪

#include<bits/stdc++.h>
using namespace std;
struct stu
{
    int y;
    int result;
};
map<int,int> mp;
bool cmp(stu &s1,stu &s2)
{
    return s1.y<s2.y;
}
int main()
{
    ios::sync_with_stdio(0);
    int n,i,j;
    cin>>n;
    stu s[n];
    for(i=0;i<n;i++)
    {
        cin>>s[i].y>>s[i].result;
        mp[s[i].y]++;
    }
    sort(s,s+n,cmp);
    int big=0;
    int sum=0;
    for(i=0;i<n;i++)
    {
        if(s[i].result==1)
        {
            sum++;
        }
    }
    int m=sum;
    for(i=0;i<n;i++)
    {
        for(j=0;j<mp[(s[i].y)];j++)
        {
        if(s[i+j].result==0) sum++;
        else sum--;
        }
        if(m<=sum)
        {
            m=sum;
            big=i+mp[s[i].y];
        }
        i+=mp[s[i].y]-1;
    }
    cout<<s[big].y<<endl;
}

有点小坑,是说在第一题的基础上,求一个最优阙值,本着前两题很简单的原则写了两层循环,过了好久才发现只得了70分。。

最后的思路就是用结构体存储y(分数)和prey(预测结果,1为正确,0为错误)

按照分数从小到大的顺序快排(时间复杂度为nlogn)

然后这个问题(那个求和)可以转化成左边0的个数+右边1的个数,因为左边元素肯定小于他,右边元素肯定大于他,先假设我们位于a[0]的左边,统计出1的个数,然后从i=0开始,依次将a[i]从右边放到我们的左边

所以当a[i]预测值为0时,得分会加1,预测值为1时,会减1
记录一个最大值,将其对应的阙值输出即可

实际上是用排序的方式,减少了重复多余的比较

#include<bits/stdc++.h>
using namespace std;
struct stu
{
    int y;
    int result;
};
bool cmp(stu &s1,stu &s2)
{
    return s1.y<s2.y;
}
int main()
{
    ios::sync_with_stdio(0);
    int n,i,j;
    cin>>n;
    stu s[n];
    for(i=0;i<n;i++)
    {
        cin>>s[i].y>>s[i].result;
    }
    sort(s,s+n,cmp);
    int big=0;
    int sum=0;
    for(i=0;i<n;i++)
    {
        if(s[i].result==1)
        {
            sum++;
        }
    }
    int m=sum;
    for(i=0;i<n;i++)
    {
        if(s[i].result==0) sum++;
        else sum--;
        if(m<=sum)
        {
            m=sum;
            big=i+1;
        }
    }
    cout<<s[big].y<<endl;
}

第三题

没写出来,确实麻烦

在这里插入图片描述

第四题

在这里插入图片描述
在这里插入图片描述

只做了前30%样例点,因为注意到前30%为一条链,且保证输入的两个结点u,v满足v=u+1,那不就可以用数组存储了吗!

最短路径肯定是从最左边开始,经过需要这种食材的酒店,最终送到最右边(或最右送到最左,因为这样不用掉头重复某一段路径)

然后就很普通的求数组的子序列和,比较k个子序列和的最大值就是所求值。

#include<bits/stdc++.h>
using namespace std;
int wr[105]= {0},wl[105]= {0},n;
int main()
{
    int m,k;
    cin>>n>>m>>k;
    int f[n][k],i,j;
    for(i=0; i<n; i++)
        for(j=0; j<k; j++)
        {
            cin>>f[i][j];
        }

    int s=0,e=0;
    for(i=0; i<n-1; i++)
    {
        cin>>s>>e;
        cin>>wr[s-1];
    }
    int m0=0;
    for(i=0; i<k; i++)
    {
        int l=-1,r=-1,sum=0;
        for(j=0; j<n; j++)
        {
            if(f[j][i]==1&&l==-1)
            {
                l=j;
            }
            if(f[j][i]==1)
            {
                r=j;
            }
        }
        for(j=l; j<r; j++)
        {
            sum+=wr[j];
        }
       // cout<<l<<' '<<r<<' '<<k<<' '<<sum<<endl;
        if(sum>m0)
        {

            m0=sum;
        }

    }
    cout<<m0<<endl;

}

第五题

在这里插入图片描述

感觉应该是用[a,b,size]的某种结构存储a到b的序列大小?类似于前几次的一个稀疏矩阵的题目。

但是时间不太够了(就不应该做第三题),于是拿long存储数据,每一步运算完都对1e9+7求余,听同学说可以骗20分,因为走的时候这题还没出分,所以要等出成绩了

#include<bits/stdc++.h>
using namespace std;
long x[100005]={0},y[100005]={0},z[100005]={0};
long a,b,c;
int main()
{
   ios::sync_with_stdio(0);
   int n,m,i,j,call,l,r;
   cin>>n>>m;
   for(i=0;i<m;i++)
   {
       cin>>call>>l>>r;
       if(call==1)
       {
           cin>>a>>b>>c;
           for(j=l;j<=r;j++)
           {
               x[j]=(x[j]+a)%1000000007;
               y[j]=(y[j]+b)%1000000007;
               z[j]=(z[j]+c)%1000000007;
           }
       }
       else if(call==2)
       {
           long k;
           cin>>k;
           for(j=l;j<=r;j++)
           {
               x[j]=(x[j]*k)%1000000007;
               y[j]=(y[j]*k)%1000000007;
               z[j]=(z[j]*k)%1000000007;
           }
       }
       else if(call==3)
       {
           long long temp;
           for(j=l;j<=r;j++)
           {
               temp=x[j];
               x[j]=y[j];
               y[j]=z[j];
               z[j]=temp;
           }
       }
       else if(call==4)
       {
           long long x0=0,y0=0,z0=0;
           for(j=l;j<=r;j++)
           {
               x0=(x0+x[j])%1000000007;
               y0=(y0+y[j])%1000000007;
               z0=(z0+z[j])%1000000007;
           }
           cout<<((x0*x0)+(y0*y0)+(z0*z0))%1000000007<<endl;
       }
   }
   return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2020年十二月ccf-csp认证总结(内附个人题解) 的相关文章

随机推荐

  • 学编程和学机器人有什么区别

    学编程和学机器人有什么区别 小孩的学习从古至今都是家长们相当关心和重视的一件事情 很多的家长在培养孩子的学习方面也可以说是相当的耐心的 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 有的家长对于学编程和学机器人有什么区别并不是很清楚
  • vue配置svg,图标显示不出来

    写在最前面 在Vue中使用svg主要靠webpack配置svg sprite loader来处理svg文件 如果有问题 配置流程按网上的教程一套下来或者直接是扒拉别人的代码还是 有问题的 需要一点webpack的知识进行排查 重点是排查的流
  • 调研

    发现网上可参考的资料太少了 最近有开个专题 文章 视频 从基础原理到编码实现 的想法 不知道是对心理学实验程序设计PSYCHTOOLBOX PTB 感兴趣的人多一些还是对信号处理算法感兴趣的人多一些呢
  • 面向对象的程序设计特点

    面向对象的程序设计特点主要有四个 抽象 封装 继承 多态 1 抽象 首先在面向对象的程序设计中 每一种事物都可以成为 对象 那么一个对象可以有多个特点 比如人有身高 体重等等 把一个事物对象的特点概括表示出来的过程叫做抽象 比如员工对象的薪
  • Vue3 父组件数据改变Echarts子组件图表没有变化

    一 问题 使用vue3写页面 引入一个echarts图 父组件数据改变 图表没有重新渲染 二 目标效果图 三 解决 数据变了 图表不变化 只需要2步 1 echarts图组件监听数据 数据改变 重新渲染 watch gt props cha
  • 04功能之利用string容器的find和substr函数实现分割字符串

    04功能之利用string容器的find和substr函数实现分割字符串 1 C 中string容器的find substr函数 1 size t xxx find string str size t count 0 从目标字符串中 即xx
  • manven命令中build和compile的区别

    compile只是编译工程 既对编译路径下的源代码进行编译 build是构建工程 一般会经过清理 编译 打包等过程 生成最终可运行或可部署的程序包 另外可参考 https blog csdn net wei gg article detai
  • 学计算机的,有点悲哀

    这两天听到的两则消息 第一则 今年的高考报考人数少了74万 今后还将下滑 第二则 就业率比较低的有计算机相关专业 就业半年后失业率比较高的专业中有计算机相关专业 我是计算机老师 并且是刚刚升二本的学校的老师 看看这两条消息 感觉很不适滋味
  • 【FFMPEG】x264 命令行去除B帧

    三种方法 此去除B帧的方法只适用于采用 libx264 编码器编码的视频 引用链接 ffmpeg x264 选项指南 第一种 参数中加 bf 0 ffmpeg i test mp4 vcodec libx264 bf 0 test 640x
  • Python中生成器和迭代器的区别

    Python中生成器和迭代器的区别 代码在Python3 5下测试 Num01 gt 迭代器 定义 对于list string tuple dict等这些容器对象 使用for循环遍历是很方便的 在后台for语句对容器对象调用iter 函数
  • 学习笔记:固件和驱动的区别?

    驱动和固件是经常会看到的字眼 尤其是在IoT设备的使用 安装过程中有时很容易搞糊涂 本文根据自己的理解对https www zhihu com question 22175660 驱动与固件的区别是什么 进行了部分整理而成 如有误导 请见谅
  • 几何检测

    概述 几何检测主要相交性检测 这里的内容大体上是根据 3D数学基础 图形与游戏开发 这本书来的 对于这本书来说 这一部分看完了后面内容就不看了 因为后面讲的太空泛了 有点像一本绝世武功的目录一样 看似很强 其实没什么卵用 1 2D隐式直线上
  • 解决报错:TypeError: log_sigmoid(): argument ‘input‘ (position 1) must be Tensor, not torch.return_types.

    报错如下 TypeError log sigmoid argument input position 1 must be Tensor not torch return types max torch max 的返回类型为 torch re
  • 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 总共多少步

    所有实现代码均使用JAVA letcode上的算法题 贴原图 首先来分析一下 网格可以使用二维数组来实现 以下图为例 m 2 n 3 起点为 1 0 0 终点为 6 1 2 1 2 3 4 5 6 由于只能向右或向下走 先列出所有路径 1
  • linux C获取Mac地址

    1 基础用法 获取eth0的mac地址 include
  • uniapp引入高德地图sdk经纬度解析诚地址名称

    1 申请key 2 下载js sdk amap wx js文件 https lbs amap com api wx gettingstarted 3 引入 import AMap from js sdk amap wx js 4 使用 th
  • 4.10实习日志

    1 命名规范 快捷键 命名规范 类名 首字母大写 单词和单词之间的首字母大写 函数名 变量名 首字母小写 单词和单词之间首字母大写 快捷键 注释 ctrl 运行 CTRL R 编译 ctrl b 查找 ctrl f 整行移动 CTRL sh
  • 投影矩阵的推导(OpenGl)

    概述 计算机显示器是一个2D平面 OpenGL渲染的3D场景必须以2D图像方式投影到计算机屏幕上 GL PROJECTION矩阵用于该投影变换 首先 它将所有定点数据从观察坐标转换到裁减坐标 接着 这些裁减坐标通过除以w分量的方式转换到归一
  • 一个 Nginx 如何实现部署多个不同的项目

    文章目录 nginx conf 配置文件 创建静态文件目录 效果 在 linux 中实现一个 nginx 部署2个不同的端口号访问不同的项目 nginx conf 配置文件 我们可以通过配置两个 server 来实现在一个 nginx 服务
  • 2020年十二月ccf-csp认证总结(内附个人题解)

    吐槽一下这个在线评测功能 平均四十分钟才能看到提交结果 本次成绩为100 100 0 30 20 最后两道题都是骗的分 提醒自己附代码的神奇图片 希望寒假有时间把没做出来的题目也再做一遍 csp官网更新出题目后 有路过的可以提醒我把题目加上