题目:简单推动##

题意:你被给予两个相同长度为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;
}

最新文章

  1. mysql缓存
  2. 二十四点算法 java实现
  3. js控制键盘只能输入数字和退格键,delete键
  4. SQL Server 2000 sp2 及更低版本不受此版本的 Windows 支持
  5. jQuery系列:N种方法大总结
  6. undefined reference to typeinfo - C++ error message
  7. [HIHO1143]骨牌覆盖问题&#183;一(矩阵快速幂,递推)
  8. 使用WebClient上传文件时的一些问题
  9. 通过SMTP协议来发送邮件
  10. 前端模块化之seajs
  11. 201521123013 《Java程序设计》第11周学习总结
  12. Cookie浅析
  13. 1.初识Node.js
  14. Oracle 12c用户和安全管理
  15. Tensorflow 报错:tensorflow.python.framework.errors_impl.InternalError: Failed to create session.
  16. oracle表空间自增
  17. Windows磁盘映射读写远程主机文件
  18. 【原创】&lt;Debug&gt; QT头文件
  19. CF Round #516 (Div. 2, by Moscow Team Olympiad)
  20. JS拖拽事件

热门文章

  1. 【集合系列】- 深入浅出分析LinkedHashMap
  2. nginx 根据不同url转发请求对应tomcat容器
  3. .NET单例模式快速学习应用
  4. nyoj 27-水池数目(BFS, DFS)
  5. vue动态样式设置
  6. C++程序的耦合性设计
  7. PostGIS 用Navicat工具添加自增
  8. 用.net core mvc 开发一个虽小但五脏俱全的网站
  9. 【绝对有收获】看看?必须告诉你为什么要使用MQ消息中间件(图解版)
  10. 驰骋工作流系统-Java共工作流引擎配置定时任务