首页 > 其他分享 >8.13日测试内容

8.13日测试内容

时间:2024-08-13 21:19:05浏览次数:5  
标签:pos return int mid cin maxn 测试 内容 8.13

8.13日测试内容

T1:P1571 眼红的Medusa

题目传送门

一遍过

实现方法

陈老师二分函数,找到陈老师目标数字

再按照科技创新奖的顺序输出

\(AC\) \(Code:\)

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 7;
int a[maxn], b[maxn];
int n, m;
int chenlaoshi(int x)
{
	int l = 1 - 1;
	int r = m + 1;
	b[l] = INT_MIN;
	b[r] = INT_MAX;
	while (l + 1 < r)
	{
		int mid = (l + r) / 2;
		if (b[mid] < x)
		{
			l = mid;
		}
		if (b[mid] > x)
		{
			r = mid;
		}
		if (b[mid] == x)
		{
			return mid;
		}
	}
	return -1;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0); 
    cin >> n >> m;
    for (int i = 1; i <= n; ++i)
    {
    	cin >> a[i];
	}
	for (int i = 1; i <= m; ++i)
    {
    	cin >> b[i];
	}
	sort(b + 1, b + 1 + m);
	for (int i = 1; i <= n; ++i)
	{
		if (chenlaoshi(a[i]) != -1)
		{
			cout << a[i] << ' ';
		}
	}
	return 0;
}

T2:P2249 【深基13.例1】查找

题目传送门

\(Wrong\) \(Code:\)

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 7;
int a[maxn];
int n;
int chenlaoshi(int x)
{
	int l = 1 - 1;
	int r = n + 1;
	a[0] = -1e9;
	a[n + 1] = 1e9;
	while (l + 1 < r)
	{
		int mid = (l + r) / 2;
		if (a[mid] > x)
		{
			r = mid;
		}
		if (a[mid] < x)
		{
			l = mid;
		}
		if (a[mid] == x)
		{
			r = mid;
		}
	}
	if (a[r] == x)
	{
		return r;
	}
	return -1;
}
int main()
{
	cin >> n;
	int m;
	cin >> m;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	while (m--)
	{
		int x;
		cin >> x;
		cout << chenlaoshi(x) << ' ';
	}
	return 0;
}

错误原因

数组开小了

错误信息:

Runtime Error.

Received signal 11:

Segmentation fault with invalid memory reference.

翻译过来就是:

运行时错误。

接收到的信号11:

分段故障,内存引用无效。

这不就是数组开小了吗 (^_^^^)

\(AC\) \(Code:\)

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 7;
int a[maxn];
int n;
int chenlaoshi(int x)
{
	int l = 1 - 1;
	int r = n + 1;
	a[0] = -1e9;
	a[n + 1] = 1e9;
	while (l + 1 < r)
	{
		int mid = (l + r) / 2;
		if (a[mid] > x)
		{
			r = mid;
		}
		if (a[mid] < x)
		{
			l = mid;
		}
		if (a[mid] == x)
		{
			r = mid;
		}
	}
	if (a[r] == x)
	{
		return r;
	}
	return -1;
}
int main()
{
	cin >> n;
	int m;
	cin >> m;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	while (m--)
	{
		int x;
		cin >> x;
		cout << chenlaoshi(x) << ' ';
	}
	return 0;
}

T3:P1678 烦恼的高考志愿

题目传送门

不会做 前世记忆忘了

实现方法

  1. lower_bound 找最接近的答案
  2. \(But\) 答案可能在左边也可能在右边
  3. \(So\) 两个做差值
  4. 如果是左侧边界,只有一个答案,右侧边界也只有一个答案。

\(AC\) \(Code:\)

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 7;
int a[maxn];
int b[maxn];
int m, n;
int main()
{
    cin >> m >> n;
    for (int i = 1; i <= m; ++i)
    {
    	cin >> a[i];
	}
	sort(a + 1, a + 1 + m);
	long long sum = 0;
	for (int i = 1; i <= n; ++i)
	{
		cin >> b[i];
		int pos = lower_bound(a + 1, a + 1 + m, b[i]) - a;
		if (pos == m + 1)
		{
			sum += abs(b[i] - a[m]);
			continue;
		}
		if (pos == 1)
		{
			sum += abs(b[i] - a[1]);
			continue;
		}
		if (abs(b[i] - a[pos]) < abs(b[i] - a[pos - 1]))
		{
			sum += abs(b[i] - a[pos]);
		}
		else
		{
			sum += abs(b[i] - a[pos - 1]);
		}
	}
	cout << sum << "\n";
	return 0;
}

T4:P1918 保龄球

题目传送门

一遍过

实现方法

定义一个 Balls 类型的结构体数组

输入每一个球道的球数,每一个球道的 id \(=\) i

sorta 数组排序

再输入每一个要找的瓶子数

用陈老师函数查找对应的瓶子数量是否存在

\(AC\) \(Code:\)

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 7;
struct balls
{
	int id;
	int x;
};
bool cmp(balls a, balls b)
{
	return a.x < b.x;
}
balls a[maxn];
int n;
int chenlaoshi(int x)
{
	int l = 1 - 1;
	int r = n + 1;
	a[l].x = INT_MIN;
	a[r].x = INT_MAX;
	while (l + 1 < r)
	{
		int mid = (l + r) / 2;
		if (a[mid].x > x)
		{
			r = mid;
		}
		if (a[mid].x < x)
		{
			l = mid;
		}
		if (a[mid].x == x)
		{
			return a[mid].id;
		}
	}
	return 0;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0); 
	cin >> n;
	for (int i = 1; i <= n; ++i)
	{
		cin >> a[i].x;
		a[i].id = i;
	}
	sort(a + 1, a + 1 + n, cmp);
	int m;
	cin >> m;
	for (int i = 1; i <= m; ++i)
	{
		int op;
		cin >> op;
		cout << chenlaoshi(op) << "\n";
	}
	return 0;
}

T5:P1102 A-B 数对

题目传送门

第一次不记得了,用的暴力,居然拿了 \(76\) 分 (奇迹)!!!

\(Wrong\) \(Code:\)

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 7;
int a[maxn];
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0); 
	int n, c;
	cin >> n >> c;
	for (int i = 1; i <= n; ++i)
	{
		cin >> a[i];
	}
	int ans = 0;
	for (int i = 1; i <= n; ++i)
	{
		for (int j = 1; j <= n; ++j)
		{
			if (a[i] - a[j] == c)
			{
				ans++;
			}
		}
	}
	cout << ans << "\n";
	return 0;
}

实现方法

lower_boundupper_bound 的另外一个作用就是直接获取相等的个数

lower_bound 找到相等的第一个位置 \(l\)

upper_bound 找到不相等的第一个位置

那么相等的最后一个位置 $r = $ upper_bound \(-1\)

相等的个数就是 \(r - l + 1\)。

\(AC\) \(Code:\)

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 7;
int a[maxn];
int n, c;
int main()
{
    cin >> n >> c;
    for (int i = 1; i <= n; ++i)
    {
    	cin >> a[i];
	}
	sort(a + 1, a + 1 + n);
	long long cnt = 0;
	for (int i = 1; i <= n; ++i)
	{
		int b = a[i] - c;
		int geshu = upper_bound(a + 1, a + 1 + n, b) - lower_bound(a + 1, a + 1 + n, b);
		cnt += geshu;
	}
	cout << cnt;
	return 0;
}

T6:B3799 [NICA #1] 序列

题目传送门

看到题后:

眼睛:我会了

脑子:不,你不会

引用一下陈老师的AC代码 \(↓\)

\(AC\) \(Code:\)

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 5e5 + 7;
int a[maxn];
int sum[maxn];
int n, m;
signed main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; ++i)
    {
    	cin >> a[i];
	}
	sort(a + 1, a + 1 + n);
	for (int i = 1; i <= n; ++i)
	{
		sum[i] = sum[i - 1] + a[i];
	}
	int num = 0;
	while (m--)
	{
		int op;
		cin >> op;
		if (op == 1)
		{
			int k;
			cin >> k;
			num += k;
		}
		else
		{
			int pos = lower_bound(a + 1, a + 1 + n, -num) - a;
			int l = pos;
			int r = n;
			cout <<  (sum[r] - sum[l - 1]) + (r - l + 1) * num << "\n";
		}
	}
	return 0;
}

\(The\) \(end\)

标签:pos,return,int,mid,cin,maxn,测试,内容,8.13
From: https://www.cnblogs.com/yucheng0630/p/18357709

相关文章

  • 【JavaEE初阶】文件内容的读写—数据流
    ......
  • 8.13 模拟赛 T3 记录
    题源发现\(v\)范围很小,有一个基于\(v\)的策略就是从\(1\)开始往上能合并就合并,这样一定不劣。于是考虑将序列划分为若干个值相等的段,形如\((num_{x},x)\),对于一个区间的段,如果有一段比两边相邻的段的数都要小,此时这个段的长度显然不会增加,所以可以直接合并,推平成两边小的......
  • 8.13今日份作业
     链栈,自己实现一遍,但是节点存储不是整数,存储学生信息(年龄,分数,姓名)三级引用。1、建立学生信息结构体,将data改为学生信息结构体类型。2、循环入栈和入队。链式栈:#include<myhead.h>typedefintmy_int;typedefcharSTR[20];typedefstruct{ STRname;//姓名 my_int......
  • 关于渗透测试靶场搭建的问题(小白经验)
    前言可能会有点啰嗦可以跳过我唠叨的环节,在我学习网络安全的过程中我遇到的问题总是多到离谱可以说比一般人多所以我比较的有点自信做这篇文章总结,当然文章末尾有整合资源懒人就直接拿吧,如果有不对的地方请毫不保留的指出谢谢——————————————————————......
  • ibert ip核测试
    1.SFP+介绍随着数字通信技术的进一步发展,各类数据的传输方案对带宽的需求迅猛增长,传统的并行总线的数据传输方式已经远远不能满足如万兆以太网、PCI-Express、SRIO、SFP等技术方案的需求,这个时候,促使高速串行数据开始被广泛地使用,Xilinx系列FPGA内部集成了能实现高速数据收的......
  • 社交媒体文案难?笔灵AI来帮忙~吸睛标题,趣味内容,轻松打造
    在这个信息洪流席卷的时代,写作已不再仅仅是少数人的专利,而是成为了连接世界、表达自我的桥梁。然而,面对空白的屏幕或纸页,创意的火花似乎总在不经意间熄灭,让人倍感迷茫。今天,我将为您揭开一款颠覆传统、激发无限可能的写作神器——笔灵AI写作的神秘面纱!适合各类写作场景及人群,......
  • 单元测试框架 powermock
    单元测试框架powermock  在pom.xml加入依赖包:<dependency><groupId>org.powermock</groupId><artifactId>powermock-api-mockito2</artifactId><version>${powermock.version}</version><scope>test</scope&......
  • 迅为2K0500开发板硬件连接快速测试
        迅为iTOP-LS2K0500开发采用龙芯LS2K0500处理器,基于龙芯自主指令系统(LoongArch®)架构,片内集成64位LA264处理器核、32位DDR3控制器、2DGPU、DVO显示接口、两路PCIe2.0、两路SATA2.0、四路USB2.0、一路USB3.0、两路GMAC、PCI总线、彩色黑白打印接口、HDA及其他常用接口。......
  • 软件项目管理资料大全(规格说明书;详细设计;测试计划;验收报告)
        前言:在软件开发过程中,文档资料是非常关键的一部分,它们帮助团队成员理解项目需求、设计、实施、测试、验收等各个环节,确保项目的顺利进行。以下是各个阶段的文档资料概述:软件项目管理部分文档清单: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需......
  • SSM基于Java通识课程管理系统v87xr 线上测试
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:学生,教师,教学视频,课程信息,选课信息,专业,学院,职称开题报告内容一、课题背景随着信息技术的飞速发展,教育领域对高效、智能的管理系统需求日益迫切......