1 条题解
-
0
自动搬运
来自洛谷,原作者为

GeorgeAAAADHD
will AFO搬运于
2025-08-24 22:43:51,当前版本为作者最后更新于2023-03-13 13:19:49,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题目大意:
给定三个问题及解决这三个问题的代码,你需要出一组数据,使得代码出错。
这是一道 Hack 题,让我们一个一个问题来看吧!
- 求 的最小公倍数。
数据范围:,且它们的最小公倍数也不超过 。
分析:
注意到求答案时出现了
x * y,且它们均为int类型,于是我们可以使x * y爆int来使代码答案出错。Code:
if(taskId==1)cout<<"1000000000 1000000000"; //因为两数的最小公倍数也不能超过10^9,所以最容易想到的方法就是使两数相等。
- 组数据,每组数据给出一个长度为 且单调递增的数组,进行 次询问,每次询问该数组中有多少个数小于等于给定的数 。
数据范围:,,。
分析:
数组长度定义没有问题,因此无法使数组越界。
但是我们可以发现,在二分查找小于等于 的数的个数时,判断条件为
l < r,因此我们可以使一开始的 就等于 ,即给定一个长度为 的数组,然后询问一个大于等于该数的 ,此时函数会返回 ,即输出了错误结果。Code:
if(taskId==2)printf("1\n1 1\n1\n2");
- 组数据,每组数据给出一个长度为 的数组,进行 次询问,每次询问该数组中有多少个数小于等于给定的数 。
数据范围:,。
分析:
这题的代码使用了桶排序 + 前缀和,因此普通的超时做法不可行。
但是我们可以发现,输入完一组数据后程序并没有重新初始化 数组,于是我们只需要构造两组一样的数据即可。
Code:
if(taskId==3)printf("2\n3 3\n4 4 5\n4 5 6\n3 3\n4 4 5\n4 5 6");
最后附上全部代码:
#include<bits/stdc++.h> using namespace std; int main(){ int taskId; cin>>taskId; if(taskId==1)cout<<1000000000<<' '<<1000000000; if(taskId==2)printf("1\n1 1\n1\n2"); if(taskId==3)printf("2\n3 3\n4 4 5\n4 5 6\n3 3\n4 4 5\n4 5 6"); return 0; }
- 1
信息
- ID
- 8486
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者