前提声明:题目均已开中文翻译,可能会有偏差,但不影响理解!!!
目录
A
题目
代码
讲解
B
题目
代码
讲解
C
题目
代码
讲解
您将获得一个数组a_1、a_2、\ldots、a_n一个1,一个2,...,一个n的正整数。一对好是一对指数(一、j)(i,j)跟1 \leq i, j \leq n1≤i,j≤n这样,对于所有人来说1 \leq k \leq n1≤k≤n,则以下相等性成立:
|a_i - a_k|+ |a_k - a_j|= |a_i - a_j|,,哪里|x|∣x∣表示的绝对值xx.
找到一对好搭档。请注意,我我可以等于jj.
输入
输入由多个测试用例组成。第一行包含单个整数tt (1 \leq t \leq 10001≤t≤1000) ― 测试用例的数量。测试用例的说明如下。
每个测试用例的第一行包含一个整数nn (1 \leq n \leq 10^51≤n≤105) ― 数组的长度。
每个测试用例的第二行包含nn整数a_1、a_2、\ldots、a_n一个1,一个2,...,一个n (1 \leq a_i \leq 10^91≤一个我≤109) 其中a_i一个我是我我-数组的第 1 个元素。
总和nn对于所有测试用例,最多是2 \cdot 10^52⋅105.
输出
对于每个测试用例,打印一行具有两个空格分隔索引我我和jj形成一对很好的阵列。案例i=j我=j是允许的。可以看出,这样的一对始终存在。如果有多个好的配对,请打印其中任何一个。
示例 1
输入复制 输出复制 3 3 5 2 7 5 1 4 2 2 3 1 2 2 3 1 2 1 1注意
在第一种情况下,对于i = 2我=2和j = 3j=3平等适用于所有人kk:
- k = 1k=1:|a_2 - a_1|+ |a_1 - a_3|= |2 - 5|+ |5 - 7|= 5 = |2 - 7|= |a_2-a_3|∣一个2−一个1∣+∣一个1−一个3∣=∣2−5∣+∣5−7∣=5=∣2−7∣=∣一个2−一个3∣,
- k = 2k=2:|a_2 - a_2|+ |a_2 - a_3|= |2 - 2|+ |2 - 7|= 5 = |2 - 7|= |a_2-a_3|∣一个2−一个2∣+∣一个2−一个3∣=∣2−2∣+∣2−7∣=5=∣2−7∣=∣一个2−一个3∣,
- k = 3k=3:|a_2 - a_3|+ |a_3 - a_3|= |2 - 7|+ |7 - 7|= 5 = |2 - 7|= |a_2-a_3|∣一个2−一个3∣+∣一个3−一个3∣=∣2−7∣+∣7−7∣=5=∣2−7∣=∣一个2−一个3∣.
#include
using namespace std;;
int main() {
int n;
cin >> n;
while(n--){
int m;
cin >> m;
int minv = 1e9+10;
int maxv = -1;
int mini ;
int maxi ;
for(int i = 0;i>a;
if(a>maxv){
maxi = i+1;
maxv = a;
}
if(a
本题关键是找到数组中的最大值和最小值的下标并输出;
k可以为1~n中的任意值,要实现 |a_i - a_k|+ |a_k - a_j|= |a_i - a_j|这个式子
就要保证| a[i]-a[j] |值最大,即数组中的最大值和最小值的差值
您将获得以下列表n整数。您可以执行以下操作:选择一个元素x从列表中删除x从列表中,并减去x从所有剩余元素。因此,在一次操作中,列表的长度正好减少1.
给定一个整数k(k>0),查找是否存在n-1操作,使得在应用操作后,列表中唯一剩余的元素等于k.
输入
输入由多个测试用例组成。第一行包含单个整数tt (1 \leq t \leq 10^41≤t≤104) ― 测试用例的数量。测试用例的说明如下。
每个测试用例的第一行包含两个整数nn和kk (2 \leq n \leq 2\cdot 10^52≤n≤2⋅105,1 \leq k \leq 10^91≤k≤109),分别是列表中的整数数和目标值。
每个测试用例的第二行包含nn列表的整数a_1、a_2、\ldots、a_n一个1,一个2,...,一个n (-10^9 \leq a_i \leq 10^9−109≤一个我≤109).
可以保证nn在所有测试用例中,不会大于2 \cdot 10^52⋅105.
输出
对于每个测试用例,如果可以实现,请打印 YESkk具有以下序列n-1n−1操作。否则,请打印 NO。
在任何情况下,您都可以打印每个字母(例如,"yes","YES","Yes","yeS","yEs"都将被识别为肯定的答案)。
示例 1
输入复制 输出复制 4 4 5 4 2 2 7 5 4 1 9 1 3 4 2 17 17 0 2 17 18 18 YES NO YES NO注意
在第一个示例中,我们有列表{4,2,2,7},我们有目标k = 5k=5.实现它的一种方法如下:首先我们选择第三个元素,获取列表{2,0,5}.接下来我们选择第一个元素,获取列表{−2,3}.最后,我们选择第一个元素,获取列表\{5\}.
#include
#include
#include
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n, a;
cin >> n >> a;
vectorv(n);
for (int& x : v) cin >> x;
bool ans = false;
if (n == 1) ans = (v[0] == a);
else {
sort(v.begin(), v.end());
int i = 0;
int j = 0;
while (j < n and i < n) {
if (v[i] + abs(a) == v[j]) {
ans = true;
break;
}
else if (v[i] + abs(a) < v[j])++i;
else ++j;
}
}
cout << (ans ? "YES" : "NO") << endl;
}
return 0;
}
看样例1
咱就是说,如果你还看不懂的话,画一个图,一目了然,
到最后,,只剩下{5}
坐标即使再发生变化,但坐标差值不会变,hh,可以得出本题求的是两个坐标的最远距离(doge
也就是找题中的最大值和最小值,看它俩的差值是否为目标值即可
您将获得一个数组nn非负整数a_1、a_2、\ldots、a_n一个1,一个2,...,一个n.您可以执行以下操作:选择一个整数x \geq 2x≥2并将数组的每个数字替换为余数,同时将该数字除以xx,即,对于所有人1 \leq i \leq n1≤i≤n设置a_i一个我自a_i \bmod x一个我勇气x.
确定是否可以通过应用零次或多次操作来使数组的所有元素相等。
输入
输入由多个测试用例组成。第一行包含单个整数tt (1 \leq t \leq 10^41≤t≤104) ― 测试用例的数量。测试用例的说明如下。
每个测试用例的第一行包含一个整数nn (1 \leq n \leq 10^51≤n≤105) ― 数组的长度。
每个测试用例的第二行包含nn整数a_1、a_2、\ldots、a_n一个1,一个2,...,一个n (0 \leq a_i \leq 10^90≤一个我≤109) 其中a_i一个我是我我-数组的第 1 个元素。
总和nn对于所有测试用例,最多是2 \cdot 10^52⋅105.
输出
对于每个测试用例,如果可以通过应用操作使列表中的所有元素相等,请打印一行带有 YES 的行。否则,请打印 NO。
在任何情况下,您都可以打印每个字母(例如,"YES","yes","yEs"都将被识别为肯定的答案)。
示例 1
输入复制 输出复制 4 4 2 5 6 8 3 1 1 1 5 4 1 7 0 8 4 5 9 17 5 YES YES NO YES注意
在第一个测试用例中,可以应用该操作x = 3x=3获取数组[2, 2, 0, 2],然后应用该操作x = 2获取[0, 0, 0, 0].
在第二个测试用例中,所有数字都已相等。
在第四个测试用例中,应用操作x = 4结果在数组中[1, 1, 1, 1]
#include
using namespace std;
int main(){
int m;
cin>>m;
while(m--){
int n;
cin>>n;
vectorv(n);
for(int i = 0;i>v[i];
bool ans1 = 0,ans2 = 0;
sort(v.begin(),v.end());
for(int i = 0;i
这一题本质就是求模(每个数都模一个大于等于2的数值),看模到最后,数组中的值是否相等,
当数组中出现了1,绝对不会出现最终结果相等的情况,因为1modx(x>=2)还是1
分成两种情况,数组中包含1和不包含1的进行分析
此外数组中每两个数只差应该大于等于2,如果差值为1,那么x+1 mod x = 1;x mod x = 0
永远不可能出现最后结果相同的情况!
经分析,代码如上
打表过样例,暴力出奇迹