2023寒假算法集训营1

news2024/9/24 19:24:06

A. World Final? World Cup! (I) (模拟、枚举)

题意:

给定一个长度为 10 的01串,表示 A、B 双方的点球情况,1 表示罚进,0 表示罚不进。

A 先手,交替罚点球,各罚五次。

得分多者获胜。若在罚完某个球后,后续的罚球无论如何都不会影响最终的结果,则比赛结束。

判断会在踢完第几个球时结束,若踢满 10 球仍未分出胜负则输出 -1.

思路:

依次枚举,每次记录下当前的得分,然后分别假设 A 和 B 在最优情况下的后续得分(即后面每次点球都罚进),再将情况合并后判断能否分出胜负。

AB 分别表示当前 A 和 B 的得分, Abest 表示 A 的最优情况,Bbest 表示 B 的最优情况,两者得分相减,可得到两个式子:

对于 A :后面 A 全罚进,B 全罚不进,即 (A + Abest) - B

对于 B :后面 B 全罚进,A 全罚不进,即 (B + Bbest) - A

如果能分出胜负,那么就 有一方即使在最优情况下的最终得分也没有对方高

即两式之间必有一个 <0 ,相乘后判断结果即可。

代码:

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

void solve()
{
    string s;
    cin >> s;
    s = ' ' + s;
    
    int A = 0, B = 0;
    for (int i = 1; i <= 10; i++){
        if (s[i] == '1'){
            if (i % 2) A++;
            else B++;
        }
        
        int Abest = (10 - i) / 2, Bbest = (11 - i) / 2;
        if ((A + Abest - B) * (B + Bbest - A) < 0){
            cout << i << endl;
            return;
        }
    }
    
    cout << -1 << endl;
}

int main()
{
    int t;
    cin >> t;
    while (t--){
        solve();
    }
    
    return 0;
}

C. 现在是,学术时间 (I)(思维 + 贪心)

题意:

教授发表论文,定义 H 表示 ”该教授发表的所有论文中,有至少 H H H 篇论文的引用量大于等于 H H H “。

给定 n 位教授,和长度为 n 的数组,表示每个人的引用量,每人都有一篇写好的论文未发表。

规定每篇论文只能被一位教授发表,一位教授可以发表多篇论文。

求重新分配每个教授发表的论文数后,所有教授的 H 指数之和的最大值。

思路:

分析 H 的定义,换句话来说,就是如果引用量不为 0 的话,则至少有 1 篇论文的引用量大于等于 1,即 H 表示最小值,如果这个人论文的引用量不为 0,其 H 指数为 1.

再根据其定义,发现 H 不可能多于总的引用非0论文数,所以最好的分配方案就是不分配。

依次枚举,如果引用量非0,则 H + 1,否则就跳过。

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;

void solve()
{
    int n;
    cin >> n;
    
    int res = 0;
    for (int i = 1; i <= n; i++){
        int x;
        cin >> x;
        if (x) res ++;
    }
    
    cout << res << endl;
}

int main()
{
    int t;
    cin >> t;
    while (t--){
        solve();
    }
    
    return 0;
}

D. 现在是,学术时间 (II)(贪心 + 数学 + 分类讨论)

题意:

在第一象限内给定两个坐标 (x, y) 和 (xp, yp),其中第一个表示由 (0, 0), (x, y) 两点确定的目标框,第二个表示由 (xp, yp) 和某个点确定的预测框。

要求 目标框和预测框两个矩形交集部分的面积除以并集部分的面积的最大值。

思路:

要使情况最优,则预测框的另一个顶点一定是目标框的四个顶点 ABCD 之一。

可以以点 (x, y) 为中心,分为 ”左上、右上、左下、右下“ 四个部分分类讨论,取最大值。

如下图所示:
在这里插入图片描述

  1. 左下,即目标框内部:
    枚举 A、B、C、D 作为另一顶点的四种情况,取最大值。

  2. 左上:
    枚举 A、B 作为另一顶点的两种情况,取最大值。

  3. 右上:
    取 A 作为另一顶点。

  4. 右下:
    枚举 A、D 作为另一顶点的两种情况,取最大值。

代码:

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

int x, y, xp, yp;

void solve()
{
    cin >> x >> y >> xp >> yp;
    
    double res = 0;
    if (xp <= x && yp <= y)  //左下
    {
        res = max(res, 1.0 * (xp * yp) / (x * y));  //A
        res = max(res, 1.0 * (x - xp) * yp / (x * y));  //B
        res = max(res, 1.0 * (x - xp) * (y - yp) / (x * y));  //C
        res = max(res, 1.0 * (xp) * (y - yp) / (x * y));  //D

        printf("%.9f\n", res);
        return;
    }
    if (xp <= x)  //左上
    {
        res = max(res, 1.0 * (xp * y) / (x * y + xp * (yp - y)));  //A
        res = max(res, 1.0 * (x - xp) * y / (x * y + (x - xp) * (yp - y)));  //B        
        
        printf("%.9f\n", res);
        return;
    }
    if (yp <= y) //右下
    {
        res = max(res, 1.0 * (x * yp) / (x * y + (xp - x) * yp));  //A
        res = max(res, 1.0 * (x) * (y - yp) / (x * y + (xp - x) * (y - yp)));  //D

        printf("%.9f\n", res);
        return;
    }
    
    //右上
    res = max(res, 1.0 * (x * y) / (xp * yp)); //A
    printf("%.9f\n", res);
}

int main()
{
    int t;
    cin >> t;
    while (t--){
        solve();
    }

    return 0;
}

H. 本题主要考察了DFS(思维)

题意:

有一个拼图游戏,由 n × n 个大小为 1 × 1 的拼图块组成,每个拼图块都是在正方形的 1 × 1 拼图块基础上生成的

生成方法为:对于每一条边,可以选择不变、向里削出一个半圆形的缺口、向外补上一个半圆形的凸出三种操作之一。

因此,一个拼图块可以由一个长度为 4 的字符串描述,四个字符分别表示上、右、下、左四条边进行的操作,上述三种操作依次记 0, 1, 2.

如下图所示:
在这里插入图片描述
每块拼图还有一个制作成本 p ,制作成本正比于面积,而拼图中削去的缺口和补上的凸出面积又相同,因此对于一块削去了 x 个半圆、补上了 y 个半圆的 1 × 1 拼图,其制作成本 p = 10 − x + y 。如上图中拼图的成本为 p = 10 − 1 + 1 = 10

现给出 n × n - 1 块表示拼图形状的字符串,要求出缺少的那块拼图的制作成本。

思路:

观察一下就会发现,所有小拼图组成一块大拼图,每块小拼图的形状都不一样,但是组成的大拼图一定是个正方形,其中的小拼图每条边都可能存在互补关系,缺口可由凸口补上。

因为 拼图总成本 = 给出拼图的成本 + 缺失拼图的成本,且大拼图总成本为 10 n 2 10n^2 10n2 .

所以要求缺少的拼图的成本,只需 用总成本减去已知拼图的成本 即可。

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 2e5 + 10;

void solve()
{
    int n;
    cin >> n;
    
    int res = 10 * n * n;
    for (int i = 1; i <= n * n - 1; i++){
        string s;
        cin >> s;
        int x = 0, y = 0;
        for (int j = 0; j < 4; j++){
            if (s[j] == '1') x++;
            if (s[j] == '2') y++;
        }
        
        res -= (10 - x + y);
    }
    
    cout << res << endl;
}

int main()
{
    int t;
    cin >> t;
    while (t--){
        solve();
    }
    
    return 0;
}


L. 本题主要考察了运气(数学期望)

题意:

给定 5 个团体,每个团体都有 4 个人。

要求找到一个人,问在最优策略下,需要猜多少次,输出期望次数。

有 100 个选项,编号从 1 至 100,第 i i i 个选项为 3.45 + 0.05 ∗ i 3.45+0.05*i 3.45+0.05i ,输出与答案最接近的选项编号。

思路:

因为每个团、每个人之间都一样,所以最佳策略就是依次猜,先猜出团,再猜出团里的人。

先猜团:5 个团,第一次猜中的概率为 0.2,第二次为 0.2,第三次为 0.2,第四次为 0.4 .

再猜团:4 个人,第一次猜中的概率为 0.25,第二次为 0.25,第三次为 0.5 .

再用计算数学期望的方法计算一下,得到最终答案为:

  0.2 × 1 + 0.2 × 2 + 0.2 × 3 + 0.4 × 4
+ 0.25 × 1 + 0.25 × 2 + 0.5 × 3
= 5.05

5.05 = 3.45 + 0.05   ×   i 5.05 = 3.45 + 0.05 \ × \ i 5.05=3.45+0.05 × i ,得 i = 32 i = 32 i=32 .

代码:

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

int main()
{
    cout << 32 << endl;

    return 0;
}

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

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

相关文章

C语言字符串操作函数(库函数)及其实现

库函数 函数介绍及模拟实现 1.1strlen 1.2strcpy 1.3strcat 1.4strcmp 1.5strncpy 1.6strncat 1.7strncmp 1.8strstr 1.9strtok 1.10strerror 1.11memcpy 1.12memmove 1.13memcmp 小结 本章重点&#xff1a; 重点介绍处理字符串和字符串的库函数的使用和注意事项…

剑指offer

剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出数组中任意一个重复的数字…

格式化输入

1、golang不同输入语句的区别&#xff1a; 特点ScanScanlnScanf从控制台读取内容SscanSscanlnSscanf从指定字符串中读取内容FscanFscanlnFscanf从文本中读取内容特点在读取内容的时候不会关注换行在读取内容的时候, 遇到换行时结束以格式化的方式读取内容&#xff0c;遇到换行…

C++程序用codeblocks集成开发环境生成的exe文件无法运行情况的解决

C程序用codeblocks集成开发环境生成的exe文件无法运行情况的解决 一般是因为你使用是自带mimgw的Code::Blocks版本&#xff0c;对#include<iostream>支持不完善造成的。 测试代码如下&#xff1a; #include <iostream> using namespace std;int main() {cout <…

测试开发 | 通用 api 封装实战,带你深入理解 PO

image1080434 66.5 KB 在普通的接口自动化测试中&#xff0c;如果接口的参数&#xff0c;比如 url&#xff0c;headers等传参改变&#xff0c;或者测试用例的逻辑、断言改变&#xff0c;那么整个测试代码都需要改变。apiobject设计模式借鉴了pageobject的设计模式&#xff0c;可…

3. PyCharm、PyQt5、PyQt5-tools的下载安装、基于PyCharm开发PyQt5

1、 PyCharm的下载安装 为什么选择PyCharm&#xff1f;而不用QtCreator&#xff0c;很明显&#xff0c;QtCreator基于C/QT开发时确实很不错&#xff0c;但是基于Python/QT开发时就显得比较鸡肋了&#xff0c;代码的智能提示&#xff0c;高亮等都没有。。而PyCharm就比较牛逼了…

【GD32F427开发板试用】位带操作实现多线程下的跑马灯

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;SmallWhite 一、位带操作 作用&#xff1a;对某一位或者几个连续的位进行操作 前言 我们在使用GD32等单片机时使用到的固件库编程&#xff…

int 和 Integer 有什么区别?为什么要有包装类?

基本数据类型 在 Java 中&#xff0c;一共有 8 种基本类型&#xff08;primitive type&#xff09;&#xff0c;其中有 4 种整型、2 种浮点类型、1 种用于表示 Unicode 编码的字符类型 char 和 1 种用于表示真假值的 boolean 类型。 4 种整型&#xff1a;int、short、long、by…

Godot实现蝴蝶飞舞Shader

前言 我一直在探索在游戏UI中实现特效的方法&#xff0c;如LOL&#xff0c;王者荣耀那种华丽的UI特效。 经过总结有一些方法 1、AE做特效渲染成序列帧供游戏引擎播放 优点&#xff1a;节省资源&#xff0c;适合定制特殊需求 缺点&#xff1a;太大占地方&#xff0c;不好修改…

【H5小游戏】-使用js复刻经典小游戏【接鸡蛋】,快来帮助鸡妈妈找回蛋宝宝吧

接鸡蛋游戏需求&#x1f447;核心玩法&#x1f447;&#x1f447;界面原型&#x1f447;&#x1f447;成品演示&#x1f447;1.游戏演示2.暂停演示游戏开发1.游戏素材准备2.代码实现1.创建index.html页面复刻经典小游戏【接鸡蛋】&#xff0c;快来帮助鸡妈妈找回它的蛋宝宝吧 …

用友BIP与旺店通·企业奇门对接集成采购订单列表查询=>创建采购单(采购订单=>采购单)

用友BIP与旺店通企业奇门对接集成采购订单列表查询>创建采购单(采购订单>采购单-p)来源系统:用友BIP用友BIP助力行业龙头企业、产业链核心企业以及平台型企业建设产业互联网运营平台&#xff0c;通过运营、管理、协同配置和共享资源&#xff0c;实现产业链上下游连接与协…

基于 CartPole-v0 环境的强化学习算法实现(附完整代码)

1.1 CartPole-v0Cart Pole 在 OpenAI 的 gym 模拟器里面是相对比较简单的一个游戏。游戏里面有一个小车&#xff0c;上有 一根杆子。小车需要左右移动来保持杆子竖直。如果杆子倾斜的角度大于 15&#xff0c;那么游戏结束。小车也不 能移动出一个范围&#xff08;中间到两边各 …

03 利用栈进行中缀表达式计算

运算符优先级 ​​​​ 栈内运算符加减乘除取模优先级比栈外优先级大1&#xff0c;例如当23-5时我们往往从左到右计算&#xff0c;即先算再算-&#xff0c;使用中缀表达式两个栈计算就是栈外-优先级低于栈顶&#xff0c;故会弹出运算符和两个操作数进行计算。 中缀表达式计算…

Redis应用技术(3)List和Set在Feed流中的选择

在数据推送的时候,我们使用Feed流 Feed流有三种推送数据的方式(以微博订阅为例) 1.推模式(Push) 将数据在发出后直接推到每个收件箱中.这样会造成发送方的内存占用很大 2.拉模式 用户每次登录后主动的将数据从收件箱中拉去到,会造成用户的负载增加(如果关注的人很多,甚至会导…

SpringCloud——config远程连接github 踩坑

说明 我们现在使用spring cloud config 远程连接github会存在网络跟不上问题&#xff0c;以及本地git密钥问题。 1.github更改了密钥策略原来生成的rsa会导致报错&#xff0c;需要使用命令重新生成ed25519密钥2.配置需要按照上述配置 force-pull: true #这个参数不加可能会有…

Linux系统的启动与关闭

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

vue-循环引用感想

vue-循环引用感想开场-什么是循环引用探讨-怎么用后话如果我们要在主组件中传方法到子组件呢普通的porps传参依赖注入开场-什么是循环引用 刚开始看着这个官方文档上的循环引用十分的不解&#xff0c;意思是什么呢&#xff1f;看着官网的意思&#xff0c;大概举了个文件管理器…

Exceeded limit on max bytes to buffer : 262144

springboot版本 2.7.3springcloud版本 2021.0.3POST请求的body是1M多&#xff0c;请求网关提示报错。org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144at org.springframework.core.io.buffer.LimitedDataBuffer…

使用 Burpsuite 测试的常用操作(一)

大家好啊&#xff0c;我是大田。今天分享一下 Burpsuite 在工作中常用操作&#xff0c;本文先说说其中两个操作。一、了解一下 Burpsuite 做什么1、Burpsuite 是一个黑客工具、安全测试工具、半自动化抓包、篡改信息。2、他能做&#xff1a;代理工具 Proxy 、爬虫 Spider、暴力…

python与excel

一、安装anaconda(阿里云镜像库) pip config list -v#pip在哪里寻找pip.conf文件 阿里云镜像&#xff1a; 1、安装完成&#xff0c;命令行输入&#xff1a;conda config生成.condarc文件&#xff08;运行期配置文件&#xff09; 2、如果原本的源中的源地址是 https&#xff0…