牛客周赛 Round 61 (C++实现)

比赛链接:牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)

文章目录

  • 1.致十年后的我们
    • 1.1 题目描述
    • 1.2 思路
    • 1.3 代码
  • 2.简单图形问题
    • 2.1 题目描述
    • 2.2 思路
    • 2.3 代码
  • 3. 小红的机器人构造
    • 3.1 题目描述
    • 3.2 思路
      • 3.2.1 问题1
      • 3.2.2 问题2
      • 3.2.3 问题3
    • 3.3 代码

1.致十年后的我们

1.1 题目描述

这个月,牛客科技创立十周年啦!
2014~2024,回望这十年时光,每个人一定都有无数想要感慨,想要抱怨,想要倾诉,想要怀念的事情。
十年前的你有对自己说过什么吗?
你想对十年后的自己说点什么吗?
题目描述

1.2 思路

因为题目的数据量极少,不需要考虑进位的问题,直接加就可以了。

1.3 代码

#include <iostream>
#include <vector>
#include <stack>
using namespace std;int main() {string s;cin >> s;s[2] = (s[2] + 1);cout << s;return 0;
}

2.简单图形问题

2.1 题目描述

对于给定的未知多边形的面积,请你判断这是一个以整数为边长的正方形、或是以整数为边长的等边三角形、或是两者均是、或是两者均不是。

2.2 思路

首先我们肯定要知道正方形和等边三角形的面积计算公式吧,正方形就不说了,等边三角形面积为:(根号3*边长的平方)/4通过公式也就说明了,在边长为整数的情况下,三角形的面积是不可能为整数的。,这样的话,只需要判断是不是正方形就可以了。
题目描述

2.3 代码

#include <iostream>
#include <vector>
#include <cmath>
#include <stack>
using namespace std;int main() {int t;cin>>t;while (t--) {//面积为整数,边也为整数int x;cin >> x;if ((int)sqrt(x) * (int)sqrt(x) == x) {//正方形cout << 0 << endl;}else {cout << 3 << endl;}}return 0;
}

3. 小红的机器人构造

3.1 题目描述

题目描述

3.2 思路

可以把这个问题分成3小块来做。

  1. 判断是否可以到达。
  2. 输出一种可以到达的情况。
  3. 输出可以删除的不同方案数。

3.2.1 问题1

为了解决这个问题,我们肯定就必须朝着目标方向走能达到的最大步数,不能回头。那么我们可以用4个变量来记录四个方向的的各个步数,然后再判断。

ll cu = 0, cd = 0, cl = 0, cr = 0;
for (int i = 0; i < n; ++i) {if (s[i] == 'U') {cu++;}else if (s[i] == 'D') {cd++;}else if (s[i] == 'L') {cl++;}else if (s[i] == 'R') {cr++;}ll op = max(cu, cd);ll po = max(cl, cr);if (op >= abs(x) && po >= abs(y)) {cout << "YES ";}else {cout << "NO";}
}

其实这里我是有些疑问的,如果我走与目标方向完全相反的路,只要数量大按这个判断也是会输出YES的,但是如果精准到方向题目会判错。就很困惑。

3.2.2 问题2

问题2的解决方法就是贪心,我们已经知道目标位置。能走则走,别回头。

ll c[6] = {0};
c[1] = abs(x);c[2] = abs(x);c[3] = abs(y); c[4] = abs(y);
for(int i = 0;i<n;++i){if(c[1]&&x>0&&s[i] == 'U'){cout<<'U';c[1]--;}else if(c[2]&&x<0&&s[i] =='D'){cout<<'D';c[2]--;}else if(c[3]&&y>0&&s[i] == 'R'){cout<<'R';c[3]--;}else if(c[4]&&y<0&&s[i] == 'L'){cout<<'L';c[4]--;}
}

3.2.3 问题3

也是本题的重点,需要了解组合数,且能够转化为代码。
以下为组合数的模板代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
const ll N=1e5+5;
const ll p=1e9+7;
ll a[N];
ll jc[N+5],inv[N+5],pw[N+5];
ll ksm(ll a,ll b)
{ll ans=1;a%=p;while(b){if(b&1){ans=ans*a%p;//错过一次 }a=a*a%p;b>>=1;}return ans;
}
void  init()
{jc[0]=inv[0]=pw[0]=1;for(int i=1;i<=N;i++){jc[i]=jc[i-1]*i%p;}inv[N]=ksm(jc[N],p-2);for(int i=N-1;i>=1;i--){inv[i]=inv[i+1]*(i+1)%p;}
} 
ll C(ll n,ll m)//cnm
{if(n<m||n<0||m<0){return 0;}return jc[n]*inv[m]%p*inv[n-m]%p;//inv[m]是m!取模p的逆元 
}

然后我们需要组合数计数。在一个方向,如果该方向上的步数可以到达目标且有多的话,以x的正方向为例子就是:C(cu,x),如果存在负方向的操作,就可以再加上C(cu,x+1)*C(cd,1)。以此类推就可以得到所有的组合数了。

3.3 代码

#include <iostream>
#include <vector>
#include <string>
using namespace std;#define ll long longint dx[] = { 0,1,0,-1 };
int dy[] = { 1,0,-1,0 };
const ll N = 1e5 + 5;
const ll p = 1e9 + 7;
ll a[N];
ll jc[N + 5], inv[N + 5], pw[N + 5];
ll ksm(ll a, ll b)
{ll ans = 1;a %= p;while (b){if (b & 1){ans = ans * a % p;//错过一次 }a = a * a % p;b >>= 1;}return ans;
}
void  init()
{jc[0] = inv[0] = pw[0] = 1;for (int i = 1; i <= N; i++){jc[i] = jc[i - 1] * i % p;}inv[N] = ksm(jc[N], p - 2);for (int i = N - 1; i >= 1; i--){inv[i] = inv[i + 1] * (i + 1) % p;}
}
ll C(ll n, ll m)//cnm
{if (n < m || n < 0 || m < 0){return 0;}return jc[n] * inv[m] % p * inv[n - m] % p;//inv[m]是m!取模p的逆元 
}int main()
{int t;cin >> t;while (t--) {int n, x, y;cin >> n >> x >> y;string s;cin >> s;ll cu = 0, cd = 0, cl = 0, cr = 0;for (int i = 0; i < n; ++i) {if (s[i] == 'U') {cu++;}else if (s[i] == 'D') {cd++;}else if (s[i] == 'L') {cl++;}else if (s[i] == 'R') {cr++;}}ll op = max(cu, cd);ll po = max(cl, cr);if (op >= abs(x) && po >= abs(y)) {cout << "YES ";ll c[6] = { 0 };c[1] = abs(x); c[2] = abs(x); c[3] = abs(y); c[4] = abs(y);ll f = 0;for (int i = 0; i < n; ++i) {if (c[1] && x > 0 && s[i] == 'U') {cout << 'U';c[1]--;}else if (c[2] && x < 0 && s[i] == 'D') {cout << 'D';c[2]--;}else if (c[3] && y > 0 && s[i] == 'R') {cout << 'R';c[3]--;}else if (c[4] && y < 0 && s[i] == 'L') {cout << 'L';c[4]--;}}init();ll res = 0, ret = 0;if (x >= 0) {for (int i = x; i <= cu; ++i) {if (i - x > cd) break;res += (C(cu, i) * C(cd, i-x));res %= p;}}else {x = -x;//为了方便计算for (int i = x; i <= cd; ++i) {if (i - x > cu) break;res += (C(cu, i-x) * C(cd, i));res %= p;}}if (y >= 0) {for (int i = y; i <= cr; ++i) {if (i - y > cl) break;ret += (C(cr, i) * C(cl, i-y));ret %= p;}}else {y = -y;for (int i = y; i <= cl; ++i) {if (i - y > cr) break;ret += (C(cr, i - y) * C(cl, i));ret %= p;}}ll num = res % p * ret % p;cout <<' '<< num;}else {cout << "NO";}cout << endl;}return 0;
}

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

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

相关文章

组合优化与凸优化 学习笔记4 凸优化问题

优化问题基本定义 假如f(x)是方圆R以内&#xff08;R只要大于0就行&#xff09;最好的一个解 等价问题 就是这种优化函数没啥区别&#xff08;乘了个系数&#xff09;&#xff0c;约束们也就多了个系数的情况&#xff0c;这和原本的显然一样。这是等价的最简单的例子。 归根结…

微服务(一)

目录 一、概念 1、单体架构 2、微服务 3、springcloud 二、微服务的拆分 1、微服务的拆分原则 1.1 什么时候拆 1.2 怎么拆 2、服务调用 2.1 resttemplate 2.2 远程调用 一、概念 1、单体架构 单体架构&#xff08;monolithic structure&#xff09;&#xff1a;顾名…

JavaScript动态数据可视化

一、引言 在前端开发中&#xff0c;JavaScript无疑是最核心的技术之一。它能够处理各种交互逻辑&#xff0c;实现复杂的功能。本文将通过一个动态数据可视化的案例&#xff0c;展示如何使用JavaScript实现复杂功能。动态数据可视化能够将大量数据以直观、生动的方式呈现&#…

YOLOv10独家改进:红外场景严重遮挡和重叠目标解决方案 | 一种新的自适应算法轻量级通道分割和变换(ALSS)模块,自适应特征提取优化策略

💡💡💡本文解决什么问题:红外检测场景存在严重遮挡和重叠目标时的局限性的问题点。 💡💡💡提出了一种新的自适应算法轻量级通道分割和变换(ALSS)模块。该模块采用自适应信道分裂策略优化特征提取,并集成信道变换机制增强信道间的信息交换。这改善了模糊特征的提…

5.03TB高清卫星影像更新(WGS84坐标投影)

最近对WGS84版的高清卫星影像数据进行了一次更新&#xff0c;并基于更新区域生成了相应的接图表。 5.03TB高清卫星影像更新 本次数据更新了6191个离线包&#xff0c;共5.03TB大小&#xff0c;并全部生成了更新范围的接图表。 更新范围接图表 更新范围的接图表由每一个离线包…

蓝牙、WiFi、2.4G、Zigbee、LoRa、NB-IoT的区别与应用场景

在现代科技的推动下&#xff0c;无线通信技术已经成为我们生活中不可或缺的一部分。从智能家居到工业自动化&#xff0c;从远程监控到环境传感&#xff0c;每一种技术都有其独特的优势和应用场景。今天&#xff0c;我们将深入探讨六种主流的无线通信技术——蓝牙、WiFi、2.4G、…

详解常见排序

目录 ​编辑 插入排序 希尔排序&#xff08;缩小增量排序&#xff09; 选择排序 冒泡排序 堆排序 快速排序 hoare版 挖坑法 前后指针法 非递归版 归并排序 递归版 非递归版 计数排序 声明&#xff1a;以下排序代码由Java实现&#xff01;&#xff01;&#xff01…

Python教程: 变量类型

Python 变量类型 变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。 基于变量的数据类型&#xff0c;解释器会分配指定内存&#xff0c;并决定什么数据可以被存储在内存中。 因此&#xff0c;变量可以指定不同的数据类型&#xff0c;这些变量可以存储整…

【计网】从零开始掌握序列化 --- 基础知识储备与程序重构

从零开始掌握序列化与反序列化 1 初识序列化与反序列化2 再谈Tcp协议3 程序重构3.1 Socket类3.2 回调函数设计3.3 最终的Tcp服务器类 1 初识序列化与反序列化 在刚学习计算机网络时&#xff0c;我们谈到过网络协议栈&#xff0c;其中最上层的就是应用层&#xff0c;那么这个应…

97、配置 VXLAN 不同子网互访 (分布式网关)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、基础配置SW1SW2IGP IS-IS 二、VXLAN1.引入库 总结 前言 一、基础配置 SW1 vlan 10 vlan 20interface GigabitEthernet0/0/1port link-type accessport de…

springboot+阿里云物联网教程

需求背景 最近有一个项目,需要用到阿里云物联网,不是MQ。发现使用原来EMQX的代码去连接阿里云MQTT直接报错,试了很多种方案都不行。最终还是把错误分析和教程都整理一下。 需要注意的是,阿里云物联网平台和MQ不一样。方向别走偏了。 概念描述 EMQX和阿里云MQTT有什么区别…

python编程开发“人机猜拳”游戏

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

利用Accelerate()进行pytorch的多GPU加速

简介 官方Github&#xff1a;https://github.com/huggingface/accelerate Accelerate 是为喜欢编写PyTorch模型的训练循环但不愿意编写和维护使用多GPU/TPU/fp16所需的样板代码的PyTorch用户创建的。 它可以仅加速与多 GPU/TPU/fp16 相关的样板代码&#xff0c;并保持其余代…

代码提交消息自动生成助手 | OPENAIGC开发者大赛高校组AI创新之星奖

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给…

hive建表指定列分隔符为多字符分隔符实战(默认只支持单字符)_hive row formate ###

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。 需要这份系统化资料的朋友,可以戳这里获取 一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎…

我国以人名命名的城市有哪些?

我国幅员辽阔&#xff0c;国内的城市非常多&#xff0c;每个城市的名字或许都有其背后的故事。 其中不乏一些以人物之名命名的城市&#xff0c;有些是上古传说中的人物&#xff0c;有些则是历史上有重要影响的人物。 湖北神农架林区&#xff0c;因炎帝神农氏而得名 而我国198…

【Linux网络 —— 网络基础概念】

Linux网络 —— 网络基础概念 计算机网络背景网络发展 初始协议协议分层协议分层的好处 OSI七层模型TCP/IP五层(或四层)模型 再识协议为什么要有TCP/IP协议&#xff1f;什么是TCP/IP协议&#xff1f;TCP/IP协议与操作系统的关系所以究竟什么是协议&#xff1f; 网络传输基本流程…

软件供应链安全管理实践之中国联通

软件供应链安全管理是保护软件开发和交付过程中所有组件的安全性和完整性的重要环节&#xff0c;软件供应链安全国家标准及政策的发布&#xff0c;为企业软件供应链安全管理提供了依据。 本文摘选自软件供应链安全推进工作组指导、苏州棱镜七彩信息科技有限公司主笔的《2023软…

编曲为什么这么难学 编曲应该从何下手,想要学习编曲,一定要有扎实的乐理基础知识

很多小伙伴在刚刚接触编曲的时候&#xff0c;可能会感觉只是学习怎么创作旋律&#xff0c;并不会很难。但在真正开始接触编曲的时候&#xff0c;却发现想要创作出好的曲目&#xff0c;要学习的知识实在是太多了&#xff0c;因此小伙伴也会感慨编曲太难学了。下面给大家详细讲解…

Python画笔案例-062 绘制彩花之太阳花

1、绘制彩花之太阳花 通过 python 的turtle 库绘制 彩花之太阳花,如下图: 2、实现代码 绘制 彩花之太阳花,以下为实现代码: """彩花之太阳花.py本程序需要coloradd模块支持,安装方法:pip install coloradd""" import turtle from coloradd…