2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛) A — E

news2024/10/6 8:30:17

2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛)

文章目录

        • A -- A Xor B Problem
          • 题目分析
          • code
        • B -- 吃苹果
          • 题目分析
          • code
        • C -- n皇后问题
          • 题目分析
          • code
        • D -- 分苹果
          • 题目分析
          • code
        • E -- 完型填空
          • 题目分析
          • code

A – A Xor B Problem

题目分析

只有相同数字异或结果才为零,统计一下相同数字出现的次数,排列组合即可。

根据样例来看,自身与自身是可以成为一对数字的。

code
#include<bits/stdc++.h>
#define int long long

using namespace std;

const int N = 1010;

int n, m, k, t;
int a[N];
map<int, int>q;

signed main()
{
    cin >> n;
    for(int i = 1; i <= n; i ++)
    {
        cin >> a[i];
        q[a[i]] ++;
    }

    int ans = 0;
   for(auto &[k, v] : q)
   {
       if(v >= 2) ans += v * v;
       else ans ++;
   }

    cout << ans << "\n";;

    return 0;
}

B – 吃苹果

题目分析

可以通过按照早上和晚上吃苹果愉悦值得差值来排序,差值越大得越优先被处理贡献值越大。

code
#include<bits/stdc++.h>
#define int long long

using namespace std;

const int N = 1e5 + 10;

int n, m, k, t;
bool st[N];

struct node
{
    int l, r;
}q[N];

bool cmp(node a, node b)
{
   return abs(a.l - a.r) > abs(b.l - b.r);
}

signed main()
{
    cin >> n >> k;
    for(int i = 1; i <= n; i ++)
    {
        int u, v;
        cin >> u >> v;
        q[i] = {u, v};
    }

    sort(q + 1, q + n + 1, cmp);

    int ans = 0;
    int r1 = n - k, r2 = k;
    for(int i = 1; i <= n; i ++)
    {
        if(q[i].l > q[i].r)
        {
            if(r1)
            {
                ans += q[i].l;
                r1 --;
            }
            else ans += q[i].r, r2 --;
        }
        else
        {
            if(r2)
            {
                ans += q[i].r;
                r2 --;
            }
            else ans += q[i].l, r1 --;
        }
    }

    cout << ans << "\n";

    return 0;
}

C – n皇后问题

题目分析

每输入一个点判断其八个方向上是否已经被放过即可,不过判断时暴力手法得判断会超时,我们可以通过判断是否在一条直线上的方式来判断会不会冲突。

横向和纵向的比较简单,问题是处理两个对角线。两个对角线为y=x+ay=-x+b,可以通过xy来看常数是否相同从而判断是否在一条直线上。

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

const int N = 1e7 + 10;

int n, m, k, t;

bool row[N], col[N], dg[N], udg[N];

bool get(int x, int y)
{
    if(!row[x] && !col[y] && !dg[x + y] && !udg[n - x  + y])
    {
        row[x] = col[y] = dg[x + y] = udg[n - x + y] = true;
        return true;
    }

    return false;
}

signed main()
{
    scanf("%d%d", &n, &t);

    while(t --)
    {
        int x, y;
        scanf("%d%d", &x, &y);
        if (get(x, y)) puts("Yes");
        else puts("No");
    }

    return 0;
}

D – 分苹果

题目分析

可以看作两个木棒把一个桌面分成了四个部分,带入点坐标根据数值得结果可以判断在哪个部分。
在这里插入图片描述

code
#include <bits/stdc++.h>
#define int long long

using namespace std;

int a[5];
int n, m, k, t;
int Ae, Be, Ce;
int Ar, Br, Cr;

signed main()
{
    cin >> n;
    cin >> Ae >> Be >> Ce;
    cin >> Ar >> Br >> Cr;

    for(int i = 1; i <= n; i ++)
    {
        int x, y;
        cin >> x >> y;

        int ans1 = Ae * x + Be * y + Ce;
        int ans2 = Ar * x + Br * y + Cr;

        if(ans1 > 0 && ans2 > 0) a[1]++;
        else if(ans1 > 0 && ans2 < 0) a[2]++;
        else if(ans1 < 0 && ans2 > 0) a[3] ++;
        else if(ans1 < 0 && ans2 < 0) a[4] ++;
    }

    sort(a + 1, a + 5);
    for(int i = 1; i <= 4; i ++) cout << a[i] << " " ;
}

E – 完型填空

题目分析

本体数据范围较小并且分成的情况很多,可以采用动态规划的方法。

集合f[i][j][k][r]表示:A选项选了i个,B选项选了j个,C选项选了k个,D选项选了f个,所得期望的值的集合

根据思考前一个得方法,可以很容易得到状态转移方程。

code
#include<bits/stdc++.h>
#define int long long

using namespace std;

const int N = 110;

int n, m, k, t;
int a[N], w[N][5];
int f[N][N][N][N];

signed main()
{
    cin >> n;
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= 4; j ++)
            cin >> w[i][j];

    n /= 4;
    for(int i = 0; i <= n; i ++)
        for(int j = 0; j <= n; j ++)
            for(int k = 0; k <= n; k ++)
                for(int r = 0; r <= n; r ++)
                {
                    if(i > 0)
                        f[i][j][k][r] = max(f[i][j][k][r], f[i - 1][j][k][r] + w[i + j + k + r][1]);
                     if(j > 0)
                        f[i][j][k][r] = max(f[i][j][k][r], f[i][j - 1][k][r] + w[i + j + k + r][2]);
                     if(k > 0)
                        f[i][j][k][r] = max(f[i][j][k][r], f[i][j][k - 1][r] + w[i + j + k + r][3]);
                     if(r > 0)
                        f[i][j][k][r] = max(f[i][j][k][r], f[i][j][k][r - 1] + w[i + j + k + r][4]);
                }

    cout << f[n][n][n][n] << "\n";

    return 0;
}

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

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

相关文章

单片机——矩阵按键模块

主要目的 学会按键扫描 1.延时函数 延时函数部分详见链接: 单片机控制一盏灯的亮与灭程序解释 void delay (uint k) //定义延时函数{uint i,j;for(i<0;i<k;i){for(j0;j<113;j){;}}}这个程序里面的延时函数的目的是按键消抖。 2.按键扫描模块 这是本次实验的重点&a…

JS的执行机制

javaScript的执行机制 JS是单线程 单线程&#xff1a;所有的任务执行时需要排队&#xff0c;前一个任务结束&#xff0c;才会执行后一个任务。缺点&#xff1a;如果前一个任务耗时很长&#xff0c;后一个任务就会一直等待执行。会导致JS 执行的时间过长&#xff0c;造成页面的…

外贸建站如何提高搜索引擎排名,吸引更多潜在客户?

在如今全球贸易日益繁荣的背景下&#xff0c;越来越多的企业开始重视外贸建站&#xff0c;并寻求提高搜索引擎排名以吸引更多潜在客户。 那么&#xff0c;如何才能有效地提高外贸网站的搜索引擎排名呢&#xff1f;本文将为您详细介绍几个有效的方法。 一、关键词优化 关键词…

使用【Python】快速生成本项目的requeirments.txt

在Python项目中&#xff0c;我们通常需要使用许多第三方库来提供额外的功能和工具。但是&#xff0c;直接将这些库上传到Git仓库并不是一种好的做法&#xff0c;因为这会使得代码库变得过于臃肿&#xff0c;并且很难管理。此外&#xff0c;有时候在部署应用程序时也需要安装特定…

等价类划分法

等价类划分法 测试一个两位数的加法计算器 测试需求&#xff1a; 测试两个参数的值相加后的结果是否正确 其中&#xff1a;输入的数值在-99到99之间&#xff0c;大于99或小于-99的输入应被拒绝&#xff0c;并显示错误信息 根据测试需求&#xff0c;我们开始测试 分别给第一个…

因果图判定表法

因果图&判定表法 在了解了等价类和边界值比较适宜搭档的测试用例方法之后 接下来我们来了解另外一队就是因果图和判定表 因果图会产生判定表法 因果图法 等价类划分法和边界值分析方法都是着重考虑输入条件而不考虑输入条件的各种组合、输入条件之间的相互制约关系。例…

每天5分钟玩转机器学习算法:逆向概率的问题是什么?贝叶斯公式是如何解决的?

本文重点 前面我们已经知道了贝叶斯公式,以及贝叶斯公式在机器学习中的应用,那么贝叶斯公式究竟解决了一个什么样的问题呢?贝叶斯是为了解决逆向概率的问题。 正向的概率和逆向的概率 正向概率:假设袋子里面有N个白球,有M个黑球,你伸手一摸,那么问题就是你摸出黑球的概…

金三银四、金九银十 面试宝典 MySQL面试题 超级无敌全的面试题汇总(超万字的面试题,让你的MySQL无可挑剔)

MySQL数据库 - 面试宝典 又到了 金三银四、金九银十 的时候了&#xff0c;是时候收藏一波面试题了&#xff0c;面试题可以不学&#xff0c;但不能没有&#xff01;&#x1f941;&#x1f941;&#x1f941; 一个合格的 计算机打工人 &#xff0c;收藏夹里必须有一份 MySQL 八…

snmputilg和snmputil的下载 / Win10下SNMP服务的安装和配置

文章目录1. snmputilg和snmputil的下载2. 在Windows上安装SNMP服务3.在Windows上进行SNMP服务的相关配置4.测试是否配置成功1. snmputilg和snmputil的下载 snmputilg和snmputil的下载 该工具是学习和模拟SNMP协议的十分常用的工具。 2. 在Windows上安装SNMP服务 右键开始图标—…

【JVM篇2】垃圾回收机制

目录 一、GC的作用 申请变量的时机&销毁变量的时机 内存泄漏 垃圾回收的劣势 二、GC的工作过程 回收垃圾的过程 第一阶段&#xff1a;找垃圾/判定垃圾 方案1&#xff1a;基于引用计数(非Java语言) 引用计数方式的缺陷 方案2&#xff1a;可达性分析(基于Java语言) …

蓝桥杯嵌入式ADC与DAC(都不需要中断)

目录 1.原理图 &#xff08;1&#xff09;ADC的原理图 &#xff08;2&#xff09;DAC的原理图 2.STM32CubeMX的配置 &#xff08;1&#xff09;ADC的配置 &#xff08;2&#xff09;DAC配置 3.代码部分 &#xff08;1&#xff09;ADC代码 &#xff08;2&#xff09;DA…

【C语言深度剖析】关键字(全)

文章目录一.存储类型关键字前言补充1&#xff1a;内存思考&#xff1a;补充2&#xff1a;变量与内存的关系补充3&#xff1a;变量的分类补充4&#xff1a;存储类补充5&#xff1a;删除数据是怎么删除的&#xff1f;1.auto2.register3.static4.extern基本用法:基本功能5.typedef…

「计算机组成原理」数据的表示和运算(二)

文章目录五、奇偶校验码六、算术逻辑单元ALU6.1 电路的基本原理6.2 加法器的设计6.2.1 一位全加器6.2.2 串行加法器6.2.3 串行进位的并行加法器6.2.4 并行进位的并行加法器七、补码加减运算器八、标志位的生成九、定点数的移位运算9.1 算数移位9.2 逻辑移位9.3 循环移位五、奇偶…

Matlab生成sinc信号

Matlab生成sinc信号 在Matlab中生成sinc信号非常容易。首先&#xff0c;我们需要了解什么是sinc波形。 sinc波形是一种理想的信号&#xff0c;它在时域上是一个宽度为无穷的矩形函数&#xff0c;而在频域上则是一个平的频谱。它的公式为&#xff1a; sinc⁡(x)sin⁡(πx)πx\…

YOLOv5源码逐行超详细注释与解读(3)——训练部分train.py

前言 本篇文章主要是对YOLOv5项目的训练部分train.py。通常这个文件主要是用来读取用户自己的数据集&#xff0c;加载模型并训练。 文章代码逐行手打注释&#xff0c;每个模块都有对应讲解&#xff0c;一文帮你梳理整个代码逻辑&#xff01; 友情提示&#xff1a;全文近5万字…

学习电气自动化PLC编程最基础的十大知识点详解

这篇文章其实是学习PLC自动化过程中必须要理解的基础问题&#xff0c;不管是西门子PLC还是三菱PLC&#xff0c;抑或欧姆龙PLC&#xff0c;以及国产品牌的PLC&#xff0c;这些问题都必须理解透&#xff0c;才能更好的开始自动化编程。不然指令学完了梯形图的逻辑可能还是搞不懂&…

Datatables展示数据(表格合并、日期计算、异步加载数据、分页显示、筛选过滤)

系列文章目录 datatable 自定义筛选按钮的解决方案Echarts实战案例代码(21)&#xff1a;front-endPage的CJJTable前端分页插件ajax分页异步加载数据的解决方案 文章目录系列文章目录前言一、html容器构建1.操作按钮2.表格构建二、时间日期计算三、dataTables属性配置1.调用2.过…

java多线程与线程池-03线程池与阻塞队列

第6章 线程池与阻塞队列 6.1 Queue接口 队列是一种特殊的集合,一般队列都具有先进先出(FIFO)的特性(并不绝对要求)。优先级队列(PriorityQueue)按照元素的比较方法排序,其他队列基本采用自然序排队。 队列Queue接口实现了Collection接口,offer()方法负责把元素插入…

带头双向循环链表及链表总结

1、链表种类大全 1、链表严格来说可能用2*2*28种结构&#xff0c;从是否带头&#xff0c;是否循环&#xff0c;是否双向三个角度区分。 2、无头单向循环链表一般不会在实际运用中直接存储数据&#xff0c;而会作为某些更复杂结构的一个子结构&#xff0c;毕竟它只在头插、头删…

【数据结构之二叉树】——二叉树的概念及结构,特殊的二叉树和二叉树性质

文章目录一、二叉树的概念及结构1.概念2.现实中的二叉树3. 特殊的二叉树&#xff1a;3.二叉树的性质二、二叉树练习题总结一、二叉树的概念及结构 1.概念 一棵二叉树是结点的一个有限集合&#xff0c;该集合: 或者为空由一个根节点加上两棵别称为左子树和右子树的二叉树组成…