首页 > 其他分享 >2024牛客暑期多校训练营10 - VP记录

2024牛客暑期多校训练营10 - VP记录

时间:2024-10-30 18:44:32浏览次数:1  
标签:10 now return int 多校 2024 pair include 节点

A. Surrender to My Will

直接判断当前是否不可翻盘。

点击查看代码
#include<cstdio>
using namespace std;

int main()
{
	char str[10]; scanf("%s",str);
	int y=0,n=0;
	for(int i=0;i<5;i++)
	{
		if(str[i]=='Y') y++;
		if(str[i]=='N') n++;
	}
	if(y>=4) printf("1\n");
	else if(n>=2) printf("-1\n");
	else printf("0\n");
	return 0;
}

B. std::pair

让我想起了去年 CSP-S2023 T3 的没好回忆(手写结构体)。

把题目中给的类型递归建成一棵(二叉)树,叶节点表示 doubleint,非叶节点表示 pair

通过首字母判断当前是哪一种,如果是叶节点就设置完节点信息直接返回;否则先找递归找左叶节点(first),递归的同时返回子节点编号和该节点对应的字符串右端点,通过左叶节点的右端点找到字符串中右叶节点的起始位置,再递归处理寻找右子节点。

查询就更简单了,把字符串拆解成一连串 firstsecond,根据这个决定走左叶节点还是右叶节点。

注意存储的时候不要在节点内存整个节点对应的字符串,会爆空间。可以存类型编号或直接存类型名称之类的。

#include<cstdio>
#include<map>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int N=1005;
int n,q;

map<string,int> raw;
struct JC_Pair{
	string name;
	int p1,p2;
}p[N*N];
int pidx=0;

string type,var;
pair<int,int> get_pair(int l) //返回 {索引,右端点}
{
	int now=++pidx;
	if(type[l]=='p') //pair<first,second>
	{
		pair<int,int> sonl=get_pair(l+5); //first
		int sonl_idx=sonl.first,mid=sonl.second;
		p[now].p1=sonl_idx;
		
		pair<int,int> sonr=get_pair(mid+2); //second
		int sonr_idx=sonr.first,end=sonr.second;
		p[now].p2=sonr_idx;
		
		p[now].name="pair";
		return {now,end+1};
	}
	
	if(type[l]=='i') //int
	{
		p[now]={"int",0,0};
		return {now,l+2};
	}
	
	if(type[l]=='d') //double
	{
		p[now]={"double",0,0};
		return {now,l+5};
	}
	
	printf("ERROR!\n");
	return {-1,-1};
}

void print_pair(int x)
{
	printf("%s",p[x].name.c_str());
	if(p[x].name=="pair")
	{
		putchar('<');
		print_pair(p[x].p1);
		putchar(',');
		print_pair(p[x].p2);
		putchar('>');
	}
	return;
}

string ts,tt;
int main()
{
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++)
	{
		cin>>type>>var;
		pair<int,int> tmp=get_pair(0);
		raw[var]=tmp.first;
	}
	for(int i=1;i<=q;i++)
	{
		cin>>ts;
		tt.clear();
		int pos=0; bool is_name=true;
		int now=0;
		while(pos<=(int)ts.length())
		{
			if(pos==(int)ts.length() || ts[pos]=='.')
			{
				if(is_name)
				{
					now=raw[tt+';'];
					is_name=false;
				}
				else
				{
					if(tt=="first") now=p[now].p1;
					else if(tt=="second") now=p[now].p2;
					else printf("ERROR!\n");
				}
				tt.clear();
			}
			else
			{
				tt+=ts[pos];
			}
			pos++;
		}
		print_pair(now);
		putchar('\n');
	}
	return 0;
}

F. Collinear Exception

因为每行出现超过两个点就一定会在这一行三点共线,所以每行最多两个,一共最多 \(2n\) 个点。

那么我们就可以维护一张图,标明空位和被某条直线覆盖的位置。每次一个点若成功加入,则将它与其它所有已经加入的点组合连直线来标记图上被这条直线覆盖的点。

本人数学不好,只能算出来时间复杂度不高于 \(O(N^3)\),但看这个样子应该是 \(O(N^2 \ln N)\) 之类的复杂度吧。

#include<cstdio>
#include<cctype>
#include<cmath>
#include<algorithm>
using namespace std;

int read_u()
{
	int x=0; char ch=getchar();
	while(!isdigit(ch)) ch=getchar();
	while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^'0');ch=getchar();}
	return x;
}

const int N=1005,M=N*N;
int n,x[M],y[M];
int avail_n,avail_x[M],avail_y[M];
bool unavail[N][N];

int gcd(int x,int y){return y?gcd(y,x%y):x;}
int main()
{
	n=read_u();
	for(int i=1;i<=n*n;i++)
	{
		x[i]=read_u(),y[i]=read_u();
		if(unavail[x[i]][y[i]]) putchar('0');
		else
		{
			putchar('1');
			unavail[x[i]][y[i]]=true;
			for(int j=1;j<=avail_n;j++)
			{
				int ax=avail_x[j],ay=avail_y[j];
				int dx=x[i]-ax,dy=y[i]-ay; //绝对值不能再这里取!否则斜率一定非负!
				int d=gcd(abs(dx),abs(dy)); dx/=d,dy/=d;
				
				int tx=x[i],ty=y[i];
				while(tx>=1&&tx<=n && ty>=1&&ty<=n)
				{
					unavail[tx][ty]=true;
					tx+=dx,ty+=dy;
				}
				tx=x[i],ty=y[i];
				while(tx>=1&&tx<=n && ty>=1&&ty<=n)
				{
					unavail[tx][ty]=true;
					tx-=dx,ty-=dy;
				}
			}
			avail_n++,avail_x[avail_n]=x[i],avail_y[avail_n]=y[i];
		}
	}
	return 0;
}

H. All-in at the Pre-flop

标签:10,now,return,int,多校,2024,pair,include,节点
From: https://www.cnblogs.com/jerrycyx/p/18516355

相关文章

  • 20222412 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    202224122024-2025-1《网络与系统攻防技术》实验三实验报告1.实验内容(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧正确使用msf编码器,使用msfvenom生成如jar之类的其他文件veil,加壳工具使用C+shellcode编程(2)通过组合应用各种技术实现恶......
  • 华为OD机试 E卷 2024|增强的strstr(Python)
    0、关于本专栏&刷题交流群本文收录于专栏【2024华为OD机试真题】,专栏共有上千道OD机试真题,包含详细解答思路、与四种代码实现(Python、Java、C++、JavaScript)。点击文末链接加入【华为OD机试交流qun】,和群友一起刷题备考。刷的越多,考试中遇到原题的概率就越大,永久、实时......
  • (Pr2024)Premiere Pro 软件下载
    目录一、AdobePremierePro发展历史1.1初期阶段1.2专业化阶段1.3创新与升级1.4下载链接二、AdobePremierePro功能介绍2.1视频剪辑与组合2.2调色与音频处理2.3字幕与输出三、AdobePremierePro系统要求3.1最低系统要求一、AdobePremierePro发展......
  • 周报 | 24.10.21-24.10.27文章汇总
    为了更好地整理文章和发表接下来的文章,以后每周都汇总一份周报。周报|24.10.14-24.10.20文章汇总-CSDN博客OpenCV学堂|YOLOv8实战|荧光显微镜细胞图像检测-CSDN博客江大白|通用视觉Backbone,TransXNet:全局+局部动态=性能强大(附源码及源码)-CSDN博客OpenMMLab|S4模......
  • 蓝桥杯备赛&学习计划 2024.11—2025.4
    学习计划概览2024年11月到12月-巩固基础,学习基本算法。2025年1月到2月-学习中级算法和数据结构。2025年3月-进阶算法学习和刷题练习。2025年4月-复习重点知识,专注于比赛准备。详细周计划2024年11月:基础知识&基础算法第1-2周:复习基本控制结构(循环、条件语......
  • 10月30日记录(《代码大全》(第二版)精读笔记)
    《代码大全》中对于“代码质量”和“设计原则”的探讨深刻而全面,给我留下了深刻的印象。在当今快速发展的软件开发环境中,理解和应用这些概念对于提升开发效率和软件质量至关重要。首先,关于代码质量,麦克康奈尔强调了代码不仅需要正确实现功能,还必须具备良好的可读性和可维护性。代......
  • 项目管理平台实操:项目经理如何设置并监控10个关键项目阶段?
    一、项目管理的关键流程与重要性介绍项目管理需关注的十个关键流程,阐述这些流程对项目成功的重要性。(一)生命周期与方法论的划定项目的生命周期与方法论如同项目的纪律,为项目的发展划定了清晰的界限。生命周期通常由开始、规划、执行/控制、完成等阶段组成,或者由工作的重复周......
  • 2024年项目经理必看!项目管理平台如何助力项目成功交付?
    一、项目管理平台的重要性在2024年,项目管理平台对于项目成功交付起着至关重要的作用。首先,项目管理平台能够极大地提高协作效率。例如,像禅道这样的优秀平台,为团队提供了统一的协作空间,成员可以在平台上共享文档、讨论问题、分配任务等。通过这种方式,信息传递更加及时准确,避......
  • 强势建议收藏!2024年工程项目管理平台上的10个高效工具
    一、多功能的禅道禅道作为工程项目管理平台,拥有众多强大功能。在项目管理和协作方面,禅道集成了产品管理、项目管理、质量管理、文档管理、组织管理和事务管理等多方面功能,完整覆盖了工程项目管理的核心流程。通过禅道,团队成员可以清晰地了解项目的各个环节,从需求收集到项目交付......
  • 2024年强势推荐!最经典4款最适合工程项目的免费管理平台
    一、工程项目管理平台的重要性工程项目管理具有复杂性高、周期长、资源要求多样、协调性强等特点。复杂性体现在涉及多个专业领域协同工作,需遵循严格法律法规和标准,且各个阶段都需要详细计划和协调。例如,一个大型工程项目可能需要土木、电气、机械等多个专业人员合作,每个领域都有......