A. Increasing and Decreasing


A. Increasing and Decreasing

原创 于 2023-09-02 11:39:48 发布 · 粉丝可见 · 251 阅读 · 0 · 0 · 本内容遵循CC 4.0 BY-SA版权协议 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 · 编辑
文章链接:https://blog.csdn.net/hacker_51/article/details/132636130

题目:

样例:

cobol<br/>3<br/>1 4 3<br/>1 3 3<br/>100 200 4<br/>
1 3 4
-1
100 150 180 200

思路:

思维题,这里我们看一下规律,我们已知a(1),a(n) ,又因为 数列b 应该是递减的,而观察规律可知 ,数列b递减过程中,等差累加, 所以当我们  a(1) 到 a(n) 之间可用的数字如果小于 这些等差之和的话,一定没有满足的数组a,特判直接输出 -1.

最后,模拟构造一遍数组,输出即可。

代码详解如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <unordered_map>
#define endl '\n'
#define YES puts("YES")
#define NO puts("NO")
#define umap unordered_map
#pragma GCC optimize(3,"Ofast","inline")
#define ___G std::ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
const int N = 2e6 + 10;

int x,y,n;

inline void solve()
{

umap<int,int>a; // 数组a

cin >> x >> y >> n;

// 我们  a(1) 到 a(n) 之间可用的数字如果小于
// 这些等差之和的话,一定没有满足的数组a,特判直接输出 -1.
if(y - x < (n - 1) * n / 2)
{
puts("-1");
return;
}

a[1] = x,a[n] = y;

int cnt = 1; // b 数组的等差

// 根据 b 数组,从后往前遍历构造
for(int i = n - 1;i >= 2;++cnt,--i)
{
// 减去等差
a[i] = a[i + 1] - cnt;
}

// 输出数组
for(int i = 1;i <= n;++i)
{
cout << a[i] << ' ';
}
cout << endl;
}

int main()
{
// freopen("a.txt", "r", stdin);
// ___G;
int _t = 1;
cin >> _t;
while (_t--)
{
solve();
}

return 0;
}

最后提交:


觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭

微信二维码

wechat pay

支付宝二维码

ali pay

A. Increasing and Decreasing
http://blog.angindem.cn/2023/09/02/Angindem-CSDN博客/045_45/
作者
Angindem
发布于
2023年9月2日
许可协议