A. 好的对子
每次测试的时间限制1秒
每次测试的内存限制256兆字节
输入标准输入
输出标准输出
给你一个正整数的数组a1,a2,...,an。一对好的指数(i,j),1≤i,j≤n,这样,对于所有1≤k≤n,下面的等式成立。
|ai-ak|+|ak-aj|=|ai-aj|。
其中|x|表示x的绝对值。
找到一个好的配对。注意,i可以等于j。
输入
输入由多个测试案例组成。第一行包含一个整数t(1≤t≤1000)--测试案例的数量。测试用例的描述如下。
每个测试用例的第一行包含一个整数n (1≤n≤105) - 阵列的长度。
每个测试用例的第二行包含n个整数a1,a2,...,an(1≤ai≤109),其中ai是数组的第i个元素。
所有测试用例的n之和最多为2⋅105。
输出
对于每个测试用例,打印一行,其中有两个空格分隔的指数i和j,它们构成数组的一对好的指数。i=j的情况是允许的。可以证明这样的一对总是存在的。如果有多个好的配对,打印其中任何一个。
注意
在第一种情况下,对于i=2和j=3,所有k的平等都成立。
k=1: |a2−a1|+|a1−a3|=|2−5|+|5−7|=5=|2−7|=|a2−a3|,
k=2: |a2−a2|+|a2−a3|=|2−2|+|2−7|=5=|2−7|=|a2−a3|,
k=3: |a2−a3|+|a3−a3|=|2−7|+|7−7|=5=|2−7|=|a2−a3|.
思路:观察式子只要让ai > aj 且ak在这两个数直接即可,所以直接sort排序输出第一个和最后一的j和i
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
typedef long long ll;
const int N = 100010;
int t;
int n;
ll a[N];
//ll cnt[N];
map<int, int> m;
int main()
{
cin >> t;
while(t --)
{
cin >> n;
for(int i = 1; i <= n; i ++)
{
cin >> a[i];
m[a[i]] = i;
}
sort(a + 1, a + n + 1);
cout << m[a[n]] << ' ' << m[a[1]] << endl;
}
return 0;
}
B. 减法操作
每次测试的时间限制1秒
每次测试的内存限制256兆字节
输入标准输入
输出标准输出
你得到了一个包含n个整数的列表。你可以进行以下操作:从列表中选择一个元素x,将x从列表中删除,然后将x的值减去所有剩余的元素。这样,在一次操作中,列表的长度正好减少了1。
给定一个整数k(k>0),找出是否有一些n-1的操作序列,使得在应用这些操作后,列表中唯一剩下的元素与k相等。
输入
输入由多个测试案例组成。第一行包含一个整数t(1≤t≤104)--测试案例的数量。测试用例的描述如下。
每个测试用例的第一行包含两个整数n和k(2≤n≤2⋅105,1≤k≤109),分别是列表中的整数数量,和目标值。
每个测试案例的第二行包含列表a1,a2,...,an(-109≤ai≤109)中的n个整数。
保证所有测试用例的n之和不大于2⋅105。
输出
对于每个测试案例,如果你能通过n-1的操作序列实现k,则打印YES。否则,打印NO。
你可以在任何情况下打印每个字母(例如,"YES"、"Yes"、"yes"、"yEs "都将被识别为一个肯定的答案)。
注意
在第一个例子中,我们有一个列表{4,2,2,7},而我们的目标是k=5。实现的方法之一是:首先我们选择第三个元素,得到列表{2,0,5}。接下来我们选择第一个元素,得到列表{2,3}。最后,我们选择第一个元素,得到列表{5}。
思路:分析:操作不改变其他数的相对大小,所以最终剩余的两个数之差,也就是它们原来的差。
只要求出数组中是否有两个数相差为 k 即可。
#include<iostream>
#include<algorithm>
#include<map>
#include<cstring>
using namespace std;
const int N = 100010;
int t;
int n, k;
int a[N];
void solve()
{
map<int, int> mp;
mp.clear();
cin >> n >> k;
for(int i = 1, x; i <= n; i ++) cin >> x,mp[x] = 1;
for(auto [x, _]: mp)
if(mp.count(x+k)) {cout << "YES\n"; return;}
cout << "NO\n";
}
int main()
{
cin >> t;
while(t --)
{
solve();
}
return 0;
}