CSP-J模拟赛三补题报告

news2024/11/27 0:27:10

前言

挂了110pts(

在这里插入图片描述

⇑ \Uparrow
\hspace{14em} 有史以来最大傻逼
T1: 100 p t s \color{green}100pts 100pts
T2: 100 p t s → 80 p t s \color{green}100pts\color{yellow}\rightarrow\color{red}80pts 100pts80pts
T3: 100 p t s → 10 p t s \color{green}100pts\color{yellow}\rightarrow\color{red}10pts 100pts10pts
T4: 10 p t s \color{red}10pts 10pts

T1 IP地址(ip)

5min秒了,10min检查。

题main

时间限制:1秒 内存限制:256M

【题目描述】

IP 地址(Internet Protocol Address)是互联网上用于识别和定位设备的数字标识。它是一种由32位或 128 位二进制数字组成的地址,在IPv4和IPv6两个主要版本中使用。

IP地址的主要功能是标识和寻址设备,使其能够在互联网上进行通信。通过将IP地址分配给计算机、服务器、路由器和其他网络设备,数据包可以被正确地发送到目标设备。IP地址还用于确定网络中不同设备的位置,以便进行网络管理和故障排除。

总之,IP地址是互联网上用于标识和定位设备的数字标识,使设备能够在互联网上进行通信。IP地址的外观根据其版本而有所不同。以下是IPv4和IPv6两个主要版本的IP地址中IPv4地址示例:

192.168.0.1
172.16.254.1
10.0.0.1
208.75.57.100

接下来,我们有 N N N 个设备,每个设备都有它的名称和 IPv4 地址,现在我们有 Q Q Q 个问题,每次我们想知道给出的IPv4地址是哪一个设备?

【输入格式】

第一行,一个正整数 N N N ,表示有 N N N 个设备;

接下去 N N N 行,首先输入该设备的名称,数据保证该设备的名称只由英文大小写组成,其次再输入该设备的IPv4地址;

接下去一行,输入一个正整数 Q Q Q ,表示有 Q Q Q 次询问;

接下去 Q Q Q 行,每行一个 IPv4 地址。

【输出格式】

对于 Q Q Q 次询问,每次询问输出该IPv4 地址对应的设备名称。

【输入样例 1】

4
Main 192.168.0.1
caixukun 8.8.8.8
some 123.13.34.45
other 23.32.45.54
3
192.168.0.1
23.32.45.54
8.8.8.8

【输出样例1】

Main
other
Google

【数据范围】

对于 30% 数据, 1 ≤ N , M ≤ 100 1≤N,M≤100 1N,M100

对于 100% 数据,1≤N,M≤1000,设备的名称是只由大小写字母组成的长度小于等于100的字符串, I P v 4 IPv4 IPv4地址”a.b.c.d”满足 0 ≤ a , b , c , d ≤ 255 0≤a,b,c,d≤255 0a,b,c,d255

思路

用map,秒了

也可以打暴力

关于 map 的用法,详见这个。

AC Code

#include<bits/stdc++.h>
using namespace std;
map<string,string>mp;
int main()
{
	freopen("ip.in","r",stdin);
	freopen("ip.out","w",stdout);
	int n,q;
	string ipv4,dis;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		cin>>dis>>ipv4;
		mp[ipv4]=dis;
	}
	scanf("%d",&q);
	for(int i=1;i<=q;i++)
	{
		cin>>ipv4;
		cout<<mp[ipv4]<<"\n";
	}
	return 0;
} 

T2 是否同构(same)

题main

时间限制:1秒 内存限制:256M

【题目描述】

有两个长度为 N N N 的数组 a , b a,b a,b,我们想知道数组 a a a 和数组 b b b 是否是同构数组?
我们定义两个数组 a , b a,b a,b 同构,则存在一个整数 k k k,使得 0 ≤ k ≤ ⌊ n ÷ 2 ⌋ 0≤k≤⌊n\div2⌋ 0kn÷2 ,有保持数组 b 不动的时候,交换数组 a a a 的前 k k k 项和后 k k k 项交换位置,即 :
s w a p ( a ​ 1 , a ​ N − k + 1 ) , ⋯ , s w a p ( a ​ k , a ​ N ) swap(a_​1,a_​N−k+1),⋯,swap(a​k,a​N) swap(a1,aNk+1),,swap(ak,aN)​​ ,使得新的数组 a a a 完全相等于数组 b b b

【输入格式】

第一行输入一个正整数 T T T,表示有 T T T 组输入;
每组输入的第一行,输入一个正整数 N N N
第二行输入 N N N 个整数,表示数组 a a a
第三行输入 N N N 个整数,表示数组 b b b

【输出格式】

如果数组 a a a 和数组 b b b 同构,则输出 Yes ,否则,输出 No。

【输入样例 1】

3
3
1 2 3
3 2 1
4
3 1 2 4
4 3 1 2
5
2 3 1 4 5
5 3 1 4 2

【输出样例 1】

Yes
No
Yes

【数据范围与约定】

对于 30% 的数据有, 1 ≤ N ≤ 10 1≤N≤10 1N10

对于 100% 的数据有, 1 ≤ T ≤ 10 1≤T≤10 1T10 1 ≤ N ≤ 1 0 6 1≤N≤10^6 1N106 1 ≤ a ​ i , b ​ i ≤ N 1≤a​_i,b_​i ≤N 1ai,biN,且有 a i ≠ a j ( i ≠ j ) a_i≠a_j(i≠j) ai=aj(i=j)

思路

AC Code

#include<bits/stdc++.h>
using namespace std;
int a[1000005],b[1000005];
int main()
{
	//freopen("same.in","r",stdin);
	//freopen("same.out","w",stdout);
	int n,T;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&a[i]);
		}
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&b[i]);
		}
		int weizhi=n>>1+1;
		for(;weizhi<=n;weizhi++)
		{
			if(b[1]==a[weizhi])
			{
				break;
			}
		} 
		int k=n-weizhi+1;
		for(int i=1;i<=k;i++)
		{
			swap(a[i],a[n-k+i]);
		}                                           
		bool flag=1;
		for(int i=1;i<=n;i++)
		{
			if(a[i]!=b[i])
			{
				flag=0;
				break;
			}
		}
		if(flag)
		{
			printf("Yes\n");
		}
		else
		{
			printf("No\n");
		}
	}
	return 0;
}

对于一个字符,必定只有一个 k k k合法。
找到这个 k k k模拟一次,看 a , b a,b a,b是否相等。

T3 箱子(box)

思路

时间限制:1秒 内存限制:256M

【题目描述】

我们有 N N N 个箱子,每个箱子有自己的重量 w ​ i w_​i wi ,每次我们可以将至多 M M M 个箱子合并成一个重量为这几个箱子重量和的箱子,花费的体力是这合并的几个箱子的重量和。请问我们将这所有的箱子合并成一个箱子所需要花费的最少体力是多少?

【输入格式】

第一行,两个正整数 N , M N ,M NM ,表示有 N N N 个箱子,每次操作至多可以合并 M M M 个箱子。

第二行, N N N 个正整数,表示这 N N N 个箱子每个箱子的重量。

【输出格式】

输出一个正整数,表示我们最少需要花费的体力是多少。

【输入样例 1】

3 2
1 2 3

【输出样例 1】

9

【输入样例 2】

7 3
1 2 3 4 5 6 7

【输出样例 2】

49

【输入样例 3】

3 3
1 2 3

【输出样例 3】

6

【数据范围】

对于 30% 的数据, 2 ≤ M ≤ N ≤ 1 0 3 2≤M≤N≤10^3 2MN103

对于 100% 的数据, 2 ≤ M ≤ N ≤ 1 0 5 2≤M≤N≤10^5 2MN105,每个箱子的重量 1 ≤ w ​ i ​​ ≤ 1 0 6 1≤w​i​​ ≤10^6 1wi​​106​​ 。

思路

不足 M M M的用0补上
然后合并果子

AC Code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
priority_queue<long long>q;
int main()
{
	//freopen("box.in","r",stdin);
    //freopen("box.out","w",stdout);
	long long n,ans=0,m;
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n;i++)
	{
		long long t;
		scanf("%lld",&t);
		q.push(-t);
	}
	if((n-1)%(m-1)>0)
	{
		int cnt=m-1-(n-1)%(m-1);
		while(cnt--)
		{
			q.push(0);
		}
}
	while(q.size()>1) 
	{
		long long cnt=0;
		for(int i=1;i<=m&&!q.empty();i++)
		{
			long long now=-q.top();
			q.pop();
			cnt+=now;
		}
		q.push(-cnt);
		ans+=cnt;
	}
	printf("%lld",ans);
	return 0;
}

T4 社恐的聚会(party)

时间限制:1秒 内存限制:256M
【题目描述】

N N N 个患有社交恐惧症的人想参与一个聚会,但是这个聚会只有两张桌子,这些社恐们不想跟自己不认识的人坐在一起!

你是这次聚会的主办方,请你想想办法,看看能不能将这 N N N 个人分在两张桌子,使得每张桌子的任意两个人都是相互认识的。

如果你有办法让这 N N N 个人分在两张桌子,请你再想想办法看看能不能让这两张桌子中人数最多的一张桌子的入座人数最少呢?

【输入格式】

第一行输入一个整数 N N N ,表示有 N N N 个社恐。

接下去第 2 行至第 N + 1 N+1 N+1 行,每行 N N N 个为 0 或者 1 的整数,表示第 i − 1 i−1 i1 号人是否认识第 j j j 号人,如果为 0 ,表示第 i − 1 i−1 i1 号社恐不认识第 j j j 号社恐,否则为 1 ,表示第 i − 1 i−1 i1号社恐认识第 j j j 号社恐。(可以是第 i i i 号社恐认识第 j j j 号社恐,但是第 j j j 号社恐不认识第 i i i 号社恐)

【输出格式】

如果不能分成两张桌子坐下这 N N N 个人,请输出No;

否则,先输出Yes,然后再输出一个正整数,表示将这 N N N 个人安排入座之后的两张桌子中人数最多的那张入座人数最少是多少。

【输入样例 1】

3
0 1 1
1 0 1
0 1 0

【输出样例 1】

Yes
2

【输入样例 2】

3
0 0 0
0 0 0
0 0 0

【输出样例 2】

No

【输入样例 3】

4
0 1 1 1
0 0 1 1
0 1 0 1
1 0 0 0

【输出样例3】

Yes
2

【数据范围】

对于 30% 的数据, 1 ≤ N ≤ 20 1≤N≤20 1N20
对于100% 的数据, 1 ≤ N ≤ 512 , a [ i ] [ i ] = 0 1≤N≤512, a[i][i]=0 1N512,a[i][i]=0,其中 a [ i ] [ i ] a[i][i] a[i][i] 表示第i号社恐对自己的是否认识为“不认识”。

思路

二分图判定+分组背包

AC Code

#include<bits/stdc++.h>
#define ll long long 
using namespace std;
const int N=514;
int n,m,cnt,a[N][N],sz[N][2],col[N];
bool f[N];
bool vis[N];
bool dfs(int u,int c)
{
	vis[u]=1;
	col[u]=c;
	sz[cnt][c]++;
	for(int i=1;i<=n;i++)
	{
		if(i!=u&&(!a[i][u]||a[u][i]))
		{
			if(vis[i])
			{
				if(col[u]==col[i])
				{
					return false;
				}
			}
			else if(!dfs(i,1-c))
			{
				return false;
			}
		}
	}
	return true;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(!vis[i])
		{
			cnt++;
			if(!dfs(i,0))
			{
				printf("No\n");
				return 0;
			}
		}
	}
	m=n>>1;
	f[0]=1;
	for(int i=1;i<=cnt;i++)
	{
		for(int j=m;;j++)
		{
			if(j<sz[i][0]&&j<sz[i][1])
			{
				break;
			}
			if(j>=sz[i][0])
			{
				f[j]|=f[j-sz[i][0]];
			}
			if(j>=sz[i][0])
			{
				f[j]|=f[j-sz[i][1]];
			}
		}
	 } 
	for(int j=m;j>=1;j--)
	{
		if(f[j])
		{
			printf("Yes\n%d",n-j);
			break;
		}
	}
	return 0;
}

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

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

相关文章

java 的三种IO模型(BIO、NIO、AIO)

java 的三种IO模型&#xff08;BIO、NIO、AIO&#xff09; 一、BIO 阻塞式 IO&#xff08;Blocking IO&#xff09;1.1、BIO 工作机制1.2、BIO 实现单发单收1.3、BIO 实现多发多收1.4、BIO 实现客户端服务端多对一1.5、BIO 模式下的端口转发思想 二、NIO 同步非阻塞式 IO&#…

【Godot4.3】模拟平面图形绕轴或点在空间旋转

概述 平面图形&#xff0c;除了常规的线性变换&#xff1a;平移、缩放、旋转、斜切之外。还可以模仿在三维空间旋转、透视等等。 矩形绕纵对称轴旋转实点的轨迹 绕对称旋转是个特殊情况&#xff0c;轨迹是圆也是为了便于理解。更实际的情况应该是椭圆。非对称轴旋转的情况轨…

Java 之深入理解 String、StringBuilder、StringBuffer

前言 由于发现 String、StringBuilder、StringBuffer 面试的时候会经常问到&#xff0c;这里就顺便总结一下&#xff1a;本文重点会以这三个字符串类的性能、线程安全、存储结构这三个方面进行分析 ✨上期回顾&#xff1a;Java 哈希表 ✨目录 前言 String 介绍 String 的不可变…

2024/10/3 408数据结构大题打卡

最短路径复习&#xff1a; bfs&#xff1a;只能解决无权图

【LeetCode每日一题】——17.电话号码的字母组合

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 回溯 二【题目难度】 中等 三【题目编号】 17.电话号码的字母组合 四【题目描述】 给定一个…

redis 5的安装及启动(window)

最近看大模型的时候发现入手redis的同学没有练手的&#xff0c;而且大部分redis的文章要钱才能看&#xff0c;在这里我把路径和环境配置&#xff0c;启动给大家说一下 下载 redis5的获取链接在下面&#xff08;为什么是redis5&#xff0c;因为上个模型用的就是redis5&#xff…

pipe函数的例子

代码&#xff1a; #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<sys/types.h> int main(void) {int result -1;int fd[2],nbytes;pid_t pid;char string[80]"ni hao, pipe!";char readbuff…

linux信号 | 学习信号四步走 | 一篇文章教你理解信号如何保存

前言&#xff1a; 本节内容是信号的保存。 学习信号&#xff0c; 我们首先了解了信号的概念&#xff0c; 然后学习了信号的产生方式。 现在就开始讲解信号在时间窗口内是如何保存在进程内部的。 ps&#xff1a;本节内容需要了解信号的概念&#xff0c; 希望友友们了解一些信号…

实用技能分享!推荐最适合论文写作的5款ai工具

在当今学术研究和教育领域&#xff0c;AI工具的应用已经变得越来越普遍。这些工具不仅能够提高写作效率&#xff0c;还能帮助生成高质量的文稿。对于教师而言&#xff0c;选择合适的AI工具可以显著提升论文写作的效率和质量。本文将重点推荐五款最适合教师论文写作的AI工具&…

Linux聊天集群开发之环境准备

一.windows下远程操作Linux 第一步&#xff1a;在Linux终端下配置openssh&#xff0c;输入netstate -tanp,查看ssh服务是否启动&#xff0c;默认端口22.。 注&#xff1a;如果openssh服务&#xff0c;则需下载。输入命令ps -e|grep ssh, 查看如否配有&#xff0c; ssh-agent …

【重学 MySQL】四十六、创建表的方式

【重学 MySQL】四十六、创建表的方式 使用CREATE TABLE语句创建表使用CREATE TABLE LIKE语句创建表使用CREATE TABLE AS SELECT语句创建表使用CREATE TABLE SELECT语句创建表并从另一个表中选取数据&#xff08;与CREATE TABLE AS SELECT类似&#xff09;使用CREATE TEMPORARY …

【重学 MySQL】五十四、整型数据类型

【重学 MySQL】五十四、整型数据类型 整型类型TINYINTSMALLINTMEDIUMINTINT&#xff08;或INTEGER&#xff09;BIGINT 可选属性UNSIGNEDZEROFILL显示宽度&#xff08;M&#xff09;AUTO_INCREMENT注意事项 适合场景TINYINTSMALLINTMEDIUMINTINT&#xff08;或INTEGER&#xff0…

Python 从入门到实战33(使用MySQL)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了数据库编程接口操作的相关知识。今天我们将学习…

SLF4J(W): Class path contains multiple SLF4J providers.

问题背景 最近在给某AI项目集成阿里的通义千问SDK&#xff0c;发现竟然有个奇怪的报错&#xff0c;仔细一看发现&#xff0c;我类上用的lombok的Slf4j注释&#xff0c;阿里用的是org.slf4j.simple.SimpleServiceProvider&#xff0c;但是lombok用的是LogbackServiceProvider&a…

关于Vben Admin多标签页面缓存不生效的问题

情况说明 笔者在接手一个基于Vben Admin框架改造的vue3后台管理项目&#xff0c;客户要求在切换头部Tab页面时&#xff0c;不要刷新清空已经填写的表单页面或者表格。 然而&#xff0c;笔者根据Vben Admin的官方文档来配置多标签页面缓存后&#xff0c;页面每次切换后&#x…

Linux 应用层协议HTTP

文章目录 一、初始HTTP协议二、URL格式网络中怎么通过URL进行定位资源呢&#xff1f;编码和解码 三、HTTP的请求格式和响应格式HTTP的请求格式HTTP的响应格式HTTP的请求方法GET方法POST方法GET Vs PostHTTP的封装和分用文件流操作浏览器获得一个完整的网页流程 HTTP的状态码对3…

一、Linux下MySQL的安装与使用

文章目录 1. 基于docker安装mysql2. 字符集的相关操作2.1 修改MySQL5.7字符集2.2 各级别的字符集2.3 字符集与比较规则(了解)2.4 请求到响应过程中字符集的变化 3. SQL大小写规范3.1 Windows和Linux平台区别3.2 Linux下大小写规则设置3.3 SQL编写建议 4. sql_mode的合理设置4.1…

知识图谱入门——5:Neo4j Desktop安装和使用手册(小白向:Cypher 查询语言:逐步教程!Neo4j 优缺点分析)

Neo4j简介 Neo4j 是一个基于图结构的 NoSQL 数据库&#xff0c;专门用于存储、查询和管理图形数据。它的核心思想是使用节点、关系和属性来描述数据。图数据库非常适合那些需要处理复杂关系的数据集&#xff0c;如社交网络、推荐系统、知识图谱等领域。 与传统的关系型数据库…

端侧大模型系列 | 端侧AI Agent任务拆解大师如何助力AI手机?(简短版)

引言 简介 模型 实验 意义&前景: 总结 引言 今人不见古时月&#xff0c;今月曾经照古人。 小伙伴们好&#xff0c;我是微信公众号《小窗幽记机器学习》的小编&#xff1a;卖沙茶面的小女孩。 设想一下&#xff0c;你的智能手机不再只是"聪明"&#xff0…

12.梯度下降法的具体解析——举足轻重的模型优化算法

引言 梯度下降法(Gradient Descent)是一种广泛应用于机器学习领域的基本优化算法&#xff0c;它通过迭代地调整模型参数&#xff0c;最小化损失函数以求得到模型最优解。 通过阅读本篇博客&#xff0c;你可以&#xff1a; 1.知晓梯度下降法的具体流程 2.掌握不同梯度下降法…