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

news2024/9/24 15:05:46

比赛链接:牛客竞赛_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 long


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的逆元 
}

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.coloradmin.cn/o/2160656.html

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

相关文章

力扣 中等 1901.寻找峰值II

文章目录 题目介绍题解 题目介绍 题解 需要明白一个事实&#xff1a;从任意一个点出发&#xff0c;可以经过一个递增路径&#xff0c;找到一个极大值点。 求出一行的最大值&#xff0c;如果这行最大值比上面的要小&#xff0c;那峰值&#xff08;之一&#xff09;就会在上面 …

最具成长潜力奖!2024中国互联网发展创新与投资大赛(深圳)落幕,爱加密载誉而归!

近日&#xff0c;由中央网信办信息化发展局、广东省委网信办指导&#xff0c;中国互联网发展基金会、中国互联网投资基金、深圳市委网信办联合主办的2024中国互联网发展创新与投资大赛&#xff08;深圳&#xff09;正式落幕。 本次大赛共有508个项目报名参赛&#xff0c;经过4个…

springboot中的异步任务

在springboot项目中可以通过EnableAsyncAsync的方式简化异步操作&#xff0c;下文使用springboot:3.2.1 源码分析 若一个bean中的公共方法上标注了Async&#xff0c;在系统启动时&#xff0c;会给这个类创建一个代理对象&#xff0c;并将该代理对象作为bean注册到spring容器中 …

PyTorch 模型调试与故障排除指南

在当代深度学习领域&#xff0c;PyTorch 已成为开发和训练神经网络的主要框架之一。然而随着模型复杂度的增加和数据规模的扩大&#xff0c;开发者常常面临各种调试和优化挑战。本文旨在为 PyTorch 开发者提供一个全面的调试指南&#xff0c;涵盖从基础概念到高级技术的广泛内容…

2024双11买什么东西比较好?2024双十一好物推荐

双十一各种爆款商品&#xff0c;打折商品非常多&#xff0c;容易让人挑花眼也容易落入消费主义的陷阱&#xff0c;买回家后发现并不实用&#xff0c;甚至可能是自己平常生活中根本用不上的东西&#xff01;即使是打折活动也要在购买前考虑一下自己是否需要&#xff0c;在日常生…

DAMODEL——创建云实例与部署深度学习模型的详细指南

使用 DAMODEL 控制台创建云实例与部署深度学习模型的详细指南 本文将逐步介绍如何使用 DAMODEL 控制台创建云实例、配置 SSH 密钥、上传与下载数据集、以及基于 UNet 网络进行眼底血管分割的完整流程。此指南适用于需要在云端进行深度学习训练的用户&#xff0c;提供详细的操作…

YOLOv10改进,YOLOv10主干网络替换为FasterNet(全网独发手把手教学,助力涨点)

摘要 近年来,许多研究致力于减少浮点运算(FLOPs)以加速神经网络。然而,我们观察到这种FLOPs的减少并不一定能带来相应的延迟减少。这主要是由于运算每秒浮点运算数(FLOPS)效率低下,尤其是在频繁的内存访问(如深度卷积)时。为了解决这一问题,提出了一种新的部分卷积(…

如何快速上手一个Github的开源项目

程序研发领域正是有一些热衷开源的小伙伴&#xff0c;技能迭代才能如此的迅速&#xff0c;因此&#xff0c;快速上手一个GitHub上的开源项目&#xff0c;基本上已经变成很个程序员小伙伴必须掌握的技能&#xff0c;因为终究你会应用到其中的一个或多个项目&#xff0c;帮助自己…

<刷题笔记> 二叉搜索树与双向链表注意事项

二叉搜索树与双向链表_牛客题霸_牛客网 (nowcoder.com) 根据题意&#xff0c;我们需要将搜索二叉树转换成有序的形式。 重点一&#xff1a;BST的中序遍历一定是有序的 因此&#xff0c;此题无论如何都需要使用中序。 又因为要求原地算法&#xff0c;所以&#xff1a; 重点二&a…

Oracle AI理论与实践,企业落地篇干货满满

最近也是看到了圈子里的一位DBA好友&#xff0c;领导安排的工作是让负责AI的落地&#xff0c;而且也作为他业绩考核的指标&#xff0c;作为1名15年的DBA老兵来说&#xff0c;让AI落地面临的困难重重。 AI已经逐渐侵入到实际的生活中&#xff0c;最近我也是参加了Oracle官方在中…

大模型下载、本地部署和调用攻略

零、下载大模型——以Qwen/Qwen2.5-7B为例 1、下载前的准备工作 1.1 仔细阅读模型的Model card介绍 里面会有支持的上下文长度、模型结构、参数量等基本信息 1.2 查看模型文件 Tokenizer相关的文件&#xff1a; merges.txt&#xff1a;这是用于Byte Pair Encoding&#xff…

git笔记之重置本地仓库所有分支和远程保持一致、工作区恢复干净,像刚clone下来一样

git笔记之重置本地仓库所有分支和远程保持一致、工作区恢复干净&#xff0c;像刚clone下来一样 code review! 文章目录 git笔记之重置本地仓库所有分支和远程保持一致、工作区恢复干净&#xff0c;像刚clone下来一样1.实现该功能的 Bash 脚本示例2.改进版&#xff1a;增加了gi…

【第十八章:Sentosa_DSML社区版-机器学习之协同过滤】

【第十八章&#xff1a;Sentosa_DSML社区版-机器学习之协同过滤】 1.算子介绍 协同过滤是推荐系统中常用的一种方法。该算法旨在填补用户-产品关联矩阵中缺少的项。在算法中&#xff0c;用户和产品都是通过一组少量的潜在因素描述&#xff0c;这些潜在因素可以用于预测用户-产…

彻底掌握Android中的ViewModel

彻底掌握Android中的ViewModel ViewModel 属于Android Jetpack库的一部分&#xff0c;是一种业务逻辑或屏幕状态容器。它提供了在配置更改&#xff08;如屏幕旋转&#xff09;后依旧保留相应状态的特性&#xff0c;帮助开发者以更加清晰和可维护的方式处理UI相关的数据&#x…

MySQL安装文档-Windows

文章目录 MySQL安装1. 安装2. 配置 MySQL安装 1. 安装 1). 双击官方下来的安装包文件 2). 根据安装提示进行安装 安装MySQL的相关组件&#xff0c;这个过程可能需要耗时几分钟&#xff0c;耐心等待。 输入MySQL中root用户的密码,一定记得记住该密码 2. 配置 安装好MySQL之后…

从零开始构建GPT风格的LLM分类器 微调GPT模型进行垃圾邮件分类

在这篇文章中&#xff0c;我想向您展示如何将预训练的大型语言模型&#xff08;LLM&#xff09;转变为强大的文本分类器。 为什么专注于分类&#xff1f; 首先&#xff0c;将预训练模型微调为分类器提供了一种温和而有效的微调入门方式。其次&#xff0c;许多现实世界和商业挑…

SpringBoot技术栈的网上超市开发实践

2 系统开发技术 这部分内容主要介绍本系统使用的技术&#xff0c;包括使用的工具&#xff0c;编程的语言等内容。 2.1 Java语言 Java语言自公元1995年至今&#xff0c;已经超过25年了&#xff0c;依然在软件开发上面有很大的市场占有率。当年Sun公司发明Java就是为了发展一门跨…

python类的call方法与init方法

1. call方法 在对象被调用了的时候就会调用call方法a(666) class A:def __call__(self, args):print(call 方法被调用了,args) aA() a(666) 2.init方法 创建对象的时候 init 方法被调用 class A:def __init__(self,args):print(创建对象的时候 init 方法被调用了,args) aA(…

shardingjdbc-读写分离配置

文章目录 1、application.yml2、shardingsphere.yaml3、创建实体类 User4、创建 UserMapper5、添加依赖6、读写分离测试7、事务测试 我们的主从复制已经提前搭建好&#xff1a; mysql-搭建主从复制&#xff1a;https://blog.csdn.net/m0_65152767/article/details/142214434 1…

使用 Python 模拟光的折射,反射,和全反射

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