A.Single Push
2024-09-01 20:15:07
题目:简单推动##
题意:你被给予两个相同长度为n的数组a[1...n]和b[1...n]
目的是进行一个推入操作,你会选择l,r,k三个数字满足1 <= l <= r <= n 还有 k > 0,
你会添加k到al,al + 1,...,ar的每个数字上
例如:a = [3, 7, 1, 4, 1, 2],选择l = 3, r = 5, k = 2,那么数组a会变成
a = [3, 7, 3, 6, 3, 2]
你可以最多进行一次操作,使得a变成b,即a和b里面的元素每个都相同
输出"YES"和"NO"
分析:要使得两个数组元素相同,可以先求出两个数组每个元素相减的值,查看这些正值是否是连续的,且只有一段连续的正值,再输出YES和NO
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
int T;
int n;
const int N = 100005;
int a[N];
int b[N];
int res[N];
int main()
{
cin >> T;
while (T--)
{
scanf("%d", &n);
int m;
for (int i = 1; i <= n; ++i)
{
scanf("%d", &m);
a[i] = m;
}
for (int i = 1; i <= n; ++i)
{
scanf("%d", &m);
b[i] = m;
}
int flag = 1;
//查看是否连续并且是否一次
for (int i = 1; i <= n; ++i)
{
res[i] = b[i] - a[i];
}
int cnt = 0;//段
int p = 0;//有负数
for (int i = 1; i <= n; ++i)
{
if (res[i] > 0)
{
while (res[i] > 0 && res[i + 1] == res[i])
{
++i;
}
++cnt;
if (cnt == 2)
{
flag = 0;
break;
}
}
else if (res[i] < 0)
{
flag = 0;
break;
}
}
if (flag == 0)
{
puts("NO");
}
else{
puts("YES");
}
}
return 0;
}
最新文章
- mysql缓存
- 二十四点算法 java实现
- js控制键盘只能输入数字和退格键,delete键
- SQL Server 2000 sp2 及更低版本不受此版本的 Windows 支持
- jQuery系列:N种方法大总结
- undefined reference to typeinfo - C++ error message
- [HIHO1143]骨牌覆盖问题&#183;一(矩阵快速幂,递推)
- 使用WebClient上传文件时的一些问题
- 通过SMTP协议来发送邮件
- 前端模块化之seajs
- 201521123013 《Java程序设计》第11周学习总结
- Cookie浅析
- 1.初识Node.js
- Oracle 12c用户和安全管理
- Tensorflow 报错:tensorflow.python.framework.errors_impl.InternalError: Failed to create session.
- oracle表空间自增
- Windows磁盘映射读写远程主机文件
- 【原创】<;Debug>; QT头文件
- CF Round #516 (Div. 2, by Moscow Team Olympiad)
- JS拖拽事件