zoukankan      html  css  js  c++  java
  • A.Single Push

    题目:简单推动##

    题意:你被给予两个相同长度为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;
    }
    
  • 相关阅读:
    分布式缓存Redis的集群-主从复制
    搭建私有Nuget服务
    分布式缓存Redis的持久化方式RDB和AOF
    .Net Core使用分布式缓存Redis:Lua脚本
    .Net Core使用分布式缓存Redis:数据结构
    .Net Core使用分布式缓存Redis:基础
    Android基础开发归档
    gdb 调试
    linux shell 常用表达式汇总
    V8 data struct
  • 原文地址:https://www.cnblogs.com/pixel-Teee/p/11962060.html
Copyright © 2011-2022 走看看