2019年广东工业大学腾讯杯新生程序设计竞赛(同步赛)

news2024/11/15 4:02:38

同步赛链接

A-原初的信纸(最值,STL)

题意:

找 n 个数的最大值.

参考代码:

void solve() {
    int n;
    std::cin >> n;
    std::vector<int> a(n);
    for (auto &c : a)
        std::cin >> c;
    std::cout << *max_element(a.begin(), a.end()) << '\n';
}

B-骑士的对决(思维)

模拟题.(博弈)

思路:

从守卫骑士的两张牌入手,如果守卫骑士拥有 'S'  和 ‘J’,那么对于远征骑士,如果他拥有‘S’那么,出于守卫骑士已经知道远征骑士选的牌了,所以他会选择 ‘S’ ,这样就是平局,相反,如果远征骑士拥有 'J' ,那么守卫骑士必定拿出 ‘S’来战胜对方,如果远征骑士拥有 ‘B’,那么守卫骑士必定拿出 ‘J’来战胜对方,所以要么平局,要么是守卫骑士赢.剩下的两种情况参考第一种情况进行模拟即可.

参考代码:

#include <bits/stdc++.h>

//模拟

using ll = long long;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    char c;
    std::string s;
    std::cin >> s >> c;
    std::map<char, bool> mp;
    mp[s[0]] = true, mp[s[1]] = true;
    if (mp['S'] && mp['J'])
    {
        if (c == 'S') {
            std::cout << "lyrnb";
        } else {
            std::cout << "pmznb";
        } 
    } else if (mp['S'] && mp['B']) {
        if (c == 'B') {
            std::cout << "lyrnb";
        } else {
            std::cout << "pmznb";
        }
    } else {
        if (c == 'J') {
            std::cout << "lyrnb";
        } else {
            std::cout << "pmznb";
        }  
    }
    return 0;
}

C-秘密的议会(算数)

直接计算即可.

参考代码:

void solve() {
    int cnty{}, cntn{};
    std::string s;
    std::cin >> s;
    std::transform(s.begin(), s.end(), s.begin(), ::tolower);
    for (char c : s) {
        cnty += (c == 'y');
        cntn += (c == 'n');
    }
    int len = s.size();
    if (cnty >= len / 2) {
        std::cout << "pmznb\n";
    } else if (cntn >= len / 2) {
        std::cout << "lyrnb\n";
    } else {
        std::cout << "wsdd\n";
    }
}

D-城市的税金(模拟)

模拟+计算.

参考代码:

void solve() {

    int n, m;
    std::cin >> n >> m;
    std::vector<int> a(n + 1);

    for (int i = 1; i <= n; i++) {
        std::cin >> a[i];
    }

    int op, l, r;
    while (m--) {
        std::cin >> op >> l >> r;
        if (op == 1) {
            for (int i = l; i <= r; i++)
                a[i] = 1ll * a[i] * 251 % 996 * 404 * 123;
        } else {
            std::map<ll, ll> mp;
            ll max = -1;
            for (int i = l; i <= r; i++) {
                mp[a[i]]++;
            }
            for (auto it : mp) {
                max = std::max(max, it.second);
            }
            std::cout << max << '\n';
        }
    }
}

E-缺席的神官(贪心)

思路:

先把所给数组的间隔存入一个新数组,然后从小到大排序,遍历该数组到 1 ~ x-k+1,累加起来组后再加上 k 即可。

参考代码:

void solve() {
    int n, m, k;
    std::cin >> n >> m >> k;
    std::vector<int> a(n + 1), b(n + 1);
    for (int i = 1; i <= n; i++)
        std::cin >> a[i];
    for (int i = 1; i < n; i++)
        b[i] = a[i + 1] - a[i];
    std::sort(b.begin() + 1, b.end() - 1);
    ll sum = std::accumulate(b.begin() + 1, b.begin() + n + 1 - k, 0LL);
    std::cout << sum + k;
}

F-失踪的玫瑰(思维)

思路:

思维题,要求一定能找到且次数最少的方案,那么我们就要考虑最差的情况,也就是尽量不要让我们找到的情况,那么一开始的玫瑰一定在边上,可以分为四种情况:

n == 1:直接输出 1 。

n == 2:直接取两次 1 ,为了使得字典序最小,所以不取 2.

n > 2 && n % 2 == 1:例如 n == 7,最差的情况是玫瑰一开始在 7 ,然后一直在 7 和 6 徘徊,这样我们得从 2 遍历到 6 ,找到 6 的时候花在 7 的盒子上,那么我们再遍历一遍,当再次找到 6 的时候花就一定在 6 的盒子上。自己多演算几遍就知道了。为什么玫瑰一开始不在 1 上呢,为了使得字典序最小嘛!

n > 2 && n % 2 == 0:例如 n == 6,最差的情况是玫瑰一开始在 1 ,然后一直在 1 和 2 徘徊,这样我们得从 2 遍历到 5,找到 5 的时候花在 2 的盒子上,然后再从 5 找到 2,找到 2 的时候就一定能找到花了。

其实以上的思路就是通过紧逼,一次不行就再来一次,从而使得一定可以找到花。

参考代码:

void solve() {
    int n;
    std::cin >> n;
    if (n & 1) {
        for (int i = 2; i < n; i++)
            std::cout << i << " ";
        for (int i = 2; i < n; i++)
            std::cout << i << ' ';
    } else {
        for (int i = 2; i < n; i++)
            std::cout << i << " ";
        for (int i = n - 1; i >= 2; i--)
            std::cout << i << ' ';
    }
    std::cout << '\n';
}

G-虚数的纸牌(模拟)

参考代码:

int change(char s) {
    if (s >= '3' && s <= '9')
        return s - '0';
    if (s == '0')
        return 10;
    if (s == 'J')
        return 11;
    if (s == 'Q')
        return 12;
    if (s == 'K')
        return 13;
    if (s == 'A')
        return 14;
    if (s == '2')
        return 15;
}

void solve() {
    std::string s;
    std::cin >> s;
    int res = s.size(); // 单
    int cnt[16] = {0};
    for (char c:s) {
        cnt[change(c)]++; // 出现次数
    }
    for (int i = 3; i <= 15; i++) {
        if (cnt[i] >= 2)
            res += 1ll * cnt[i] * (cnt[i] - 1) / 2; // 对子
        if (cnt[i] == 4) {
            res++;                     // 炸弹
            res += 4 * (s.size() - 4); // 三带一,减去自己的4张
            for (int j = 3; j <= 15; j++) {
                if (i != j) {
                    res += 4ll * cnt[j] * (cnt[j] - 1) / 2; // 三带二
                }
            }  
        }
        else if (cnt[i] == 3) {
            res += s.size() - 3; // 三带一
            for (int j = 3; j <= 15; j++) {
                if (i != j) {
                    res += 1ll * cnt[j] * (cnt[j] - 1) / 2; // 三带二
                }
            }
                
        }
        if (i <= 11) {
            int t = 1;
            for (int j = 0; j < 5; ++j) // 五单顺子
                t *= cnt[i + j];
            res += t;
        }
    }
    std::cout << res << '\n';
}

H-绵羊的银币(思维)

思路:

这道题以 2 的幂次方从为区间不断递增,区间内都是一个相同的数,且区间其实就是斐波那契数列,所以只需要知道 n 是属于哪一个区间即可。 

参考代码:

#include <bits/stdc++.h>

using ll = long long;

ll f[99];

void solve() {
    ll p = 1, x = 0, n;
    std::cin >> n;
    while (p <= n)
        p <<= 1, x++;
    std::cout << f[x - 1] << '\n';
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    int t;
    std::cin >> t;
    f[0] = f[1] = 1;
    for (int i = 2; i <= 90; i++)  //初始化
        f[i] = f[i - 1] + f[i - 2];
    while (t--) {
        solve();
    }
    return 0;
}

I-迷途的怪物(思维)

如果 n 是奇数的话,(p -1)^ n 对 p 取模,结果还是 p - 1;如果是偶数的话,结果就是 1.

参考代码:

void solve() {
    std::string s;
    int p;
    std::cin >> p >> s;
	if ((s.back()-'0') & 1) {
        std::cout << p - 1 << '\n';
    } else {
        std::cout << "1\n";
    }
}

J-简单的数学(数学题)

参考代码:

void solve() {
    int n;
    std::cin >> n;
    if (n & 1) {
        std::cout << 1ll * (n + 1) * n << '\n';
    } else {
        std::cout << 1ll * (n + 1) * n * (-1) << '\n';
    }
}

K-消亡的质数(思维,数学)

思路:

立方差公式为 p = a^3 - b^3 = (a - b) (a^2 + ab + b^2),两个数的乘积本来应该是合数,但 p 确实质数,说明两个乘数中有一个为 1,可想而知 a - b = 1,那么 p = a^2 + a*b + b^2,题目就变得简单了,只要枚举判断是否存在这样相邻的两个数的立方差等于 p。

参考代码:

#include <bits/stdc++.h>

using ll = long long;

ll judge(ll x) {
    if (x <= 0)
        return 0;
    for (ll i = 1; i * i + i * (i + 1) + (i + 1) * (i + 1) <= x; i++) {
        if (i * i + i * (i + 1) + (i + 1) * (i + 1) == x) {
            return 1;
        }
    } 
    return 0;
}
int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    int t;
    std::cin >> t;
    while (t--) {
        ll p;
        std::cin >> p;
        std::cout << (judge(p) ? "YES\n" : "NO\n");
    }
    return 0;
}

L-危险的台阶(思维)

我首先想的是从最高(外)处那块石板开始考虑,假设每块石板的长度为1。当只有一块石阶时,显然,由于石板密度均匀,一块长度为1的石板的重心即为1/2,因此,最大伸出长度为1/2。然后,考虑两块石板时的情况,如下图。只需找到两块石板的重心即可,显然可得,最大长度为1/2+1/4=3/4。结果应是 (1/2)L+(1/4)L+(1/6)L+…+(1/2n)L(可根据重心联立方程组解得第三块石板伸出长度为1/6).

参考代码:

#include <bits/stdc++.h>

using ll = long long;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    ll n, l, m;
    std::cin >> n >> l >> m;
    double sum = 0,s = 2;
    int i = 1;
    while (n--) {
        sum += l / (s * i++);
    }
    std::cout << std::fixed << std::setprecision(4) << sum;
    return 0;
}

M-破碎的愿望(思维,STL)

思路:

该题数很大,要定义为长整型。由于字符串变化都是把字符串翻转后接到原字符串后面无限延伸,所以无限延伸的字符串只不过是所给字符串翻转后接到所给字符串得到的新字符串为循环节一直循环增加。我们只需要把 k 对所得到循环节字符串长度取余后输出相应位置的字符。

注意: 有一个特判,如果取余后为 0,说明是最后一个字符。

参考代码:

#include <bits/stdc++.h>

using ll = long long;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    ll n, k;
    std::string s;
    std::cin >> n >> k >> s;
    ll x = k % (n * 2);
    std::string s1 = s;
    std::reverse(s1.begin(), s1.end());
    s = s + s1;
    if (x == 0) {
        std::cout << s[n * 2 - 1];
    } else {
        std::cout << s[x - 1];
    }
    return 0;
}

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

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

相关文章

3. SpringMVC Rest 风格

1. REST 简介 REST&#xff08;Representational State Transfer&#xff09;&#xff0c;表现形式状态转换&#xff0c;它是一种软件架构风格。 当要表示一个网络资源的时候&#xff0c;可以使用两种方式&#xff1a; 传统风格资源描述形式 http://localhost/user/getById?…

ts快速上手之实现hello world 常见的踩坑排除

前言 大家新年快乐&#xff0c;刚过了一个年又快要到情人节了&#xff0c;提前祝各位同行有女朋友的情人节快乐&#xff0c;没有对象那就new一个对象吧[滑稽] 关于TypeScript 闲话少说&#xff0c;相信大家在这个平台上看到的文章好多开头都会说一些介绍是多久诞生的&#x…

Java面试——MyBatis篇

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

Flutter(一)介绍、Dart语言简介

Flutter介绍 纯原生开发主要面临动态化更新和开发成本两个问题&#xff0c;而针对这两个问题&#xff0c;诞生了一些跨平台的动态化框架 跨平台技术简介 Flutter 是 Google 推出并开源的移动应用开发框架&#xff0c;主打跨平台、高保真、高性能。开发者可以通过 Dart 语言开…

【云原生kubernetes】k8s service使用详解

一、什么是服务service&#xff1f; 在k8s里面&#xff0c;每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失&#xff0c;重启pod的ip地址会发生变化&#xff0c;此时客户如果访问原先的ip地址则会报错 &#xff1b; Service (服务)就是用来解决这个问题的…

Django设计模式以及模板层介绍

MVC和MTV 传统的MVC作用&#xff1a;降低模块间的耦合度&#xff08;解耦&#xff09;Django的MTV模式 作用&#xff1a;降低模块间的耦合度&#xff08;解耦&#xff09;什么是模板 1、模板是可以根据字典数据动态变化的html网页2、模板可以根据视图中传递的字典数据动态生成相…

AtCoder Grand Contest 061(题解)

A - Long Shuffle 这道题本质是一个找规律的题 既然是打表题&#xff0c;我们先暴力把他打出来 (盗一张图.jpg) 接下来就是在这张图中挖掘答案 我们可以明显的看到偶数行是有一些规律的 要么是相邻对的互换&#xff0c;要么不变 不变和互换的位置也有讲究&#xff0c;在二进制…

DS期末复习卷(四)

一、选择题(每题1分共 20分) 1&#xff0e;设一维数组中有n个数组元素&#xff0c;则读取第i个数组元素的平均时间复杂度为&#xff08;C &#xff09;。 (A) O(n) (B) O(nlog2n) © O(1) (D) O(n2) 数组读取元素的时间复杂度为O&#xff08;1&#xff09; 2&#xff0e;设…

SpringCloud Alibaba

文章目录&#x1f68f; 第十七章 SpringCloud Alibaba入门简介&#x1f6ac; 一、为什么使用Alibaba&#x1f6ad; 1、spring netflix进入维护模式&#x1f6ad; Spring cloud alibaba&#x1f6ac; 二、如何使用&#xff1f;&#x1f6ac; 三、版本对应&#x1f68f; 第十八章…

Jmeter接口测试+压力测试

jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;体积小&#xff0c;功能全&#xff0c;使用方便&#xff0c;是一个比较轻量级的测试工具&#xff0c;使用起来非常简单。因为jmeter是java开发的&#xff0c;所以运行的时候必须先要安装jdk才可以。jmeter是免…

朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解

相关文章 K近邻算法和KD树详细介绍及其原理详解朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解 文章目录相关文章前言一、朴素贝叶斯算法二、拉普拉斯平滑总结前言 今天给大家带来的主要内容包括&#xff1a;朴素贝叶斯算法、拉普拉斯平滑。这些内容也是机器学习的基础内容…

AXI-Lite 学习笔记

AXI-Lite 学习笔记 参考 FPGA&#xff1a;AXI_Lite总线基础2-1]、第二节 AXI总线介绍、ZYNQ PL与PS交互专题_哔哩哔哩_bilibili AXI-Lite总线系列1 - 基础知识_哔哩哔哩_bilibili AXI4 介绍 AXI4 是ARM公司提出的一种片内总线&#xff0c;描述了主从设备之间的数据传输方式。主…

深入浅出原核基因表达调控(乳糖操纵子、色氨酸操纵子)

原核基因表达调控 前言 自然界里&#xff0c;能量时有时无&#xff0c;各种生命为了让自己能够活下去&#xff0c;需要适应环境&#xff0c;在不同的环境合成不同的蛋白质。 原核生物体内有很多细胞&#xff0c;细胞里面有很多蛋白质&#xff0c;但是这些蛋白质在这些细胞里…

React Draggable插件实现拖拽功能

React Draggable插件实现拖拽功能1.下载Draggable插件2.引入Draggable插件3.设置一个div&#xff0c;并设置样式&#xff0c;并用Draggable包裹起来4.设置拖拽的范围5.Draggable常用props1.下载Draggable插件 npm install react-draggable2.引入Draggable插件 // 引入拖拽插件…

浅谈指向二维数组元素的指针变量

(1)指向数组元素的指针变量 例1.有一个3X4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值. 编写程序 1 #include <stdio.h>2 int main()3 {4 int a[3][4] { 1,3,5,7,9,11,13,15,17,19,21,23 };5 int *p;6 for (p a[0]; p < a[0] 12; p) …

sni+tomcat漏洞复现

sni SNI产生背景 SSL以及TLS&#xff08;SSL的升级版&#xff09;为客户端与服务器端进行安全连接提供了条件。但是&#xff0c;由于当时技术限制&#xff0c;SSL初期的设计顺应经典的公钥基础设施 PKI(Public Key Infrastructure)设计&#xff0c;PKI 认为一个服务器只为一个…

SpringBoot简单集成OpenFeign

问题 在SpringBoot中简单集成Feign&#xff0c;不想使用Rest Temple了。 步骤 Maven <properties><spring.cloud-version>2022.0.1</spring.cloud-version></properties> <dependencyManagement><dependencies><dependency><g…

javaEE 初阶 — 连接管理机制

文章目录连接管理机制1. 建立连接&#xff08;三次握手&#xff09;2. 断开连接&#xff08;四次挥手&#xff09;TCP 的工作机制确认应答机制 超时重传机制 连接管理机制 比如 主机A 的空间存储了 主机B 的 ip 和 端口&#xff0c;主机B 的空间存储了 主机A 的 ip 和 端口。…

autoCAD2022 - 设置新的原点

文章目录autoCAD2022 - 设置新的原点概述笔记UCS原点设置功能的菜单位置ENDautoCAD2022 - 设置新的原点 概述 上次整板子的dxf时, 原来的原点不合适, 想调整一下. 当时整完了, 没记录. 这次用的时候, 又找半天… 设置新原点的功能, 不在顶部菜单中, 而是在视图右上角的UCS图标…

微服务网关(十二)redis流量统计

微服务网关&#xff08;十二&#xff09;redis流量统计中间件 redis流量统计中间件 redis详细&#xff1a; redis.go: // RedisConfPipline redis连接的设置方法&#xff0c;例如在流量统计中间件中设置数据和超时时间 func RedisConfPipline(pip ...func(c redis.Conn)) e…