Решение задачи Один подъем с Codeforces

Без пояснения   Просмотров: 26


Вам дано два массива a[1…n] и b[1…n] одинаковой длины 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 станет [3,7,3,6,3––––––,2].

Вы можете применять эту операцию не более одного раза. Можете ли вы сделать массив a равным массиву b?

(Мы считаем, что a=b если и только если для всех 1≤i≤n, ai=bi)

Код

#include<bits/stdc++.h>
int t,n,s,a[100005];
int main(){
	int i,j,x;
	scanf("%d",&t);
	while (t--){
		scanf("%d",&n);
		for (i=1;i<=n;i++) scanf("%d",&a[i]);
		for (i=1;i<=n;i++) scanf("%d",&x),a[i]-=x;
		s=0;
		for (i=1;i<=n;i=j){
			if (s>1) break;
			for (j=i+1;j<=n;j++)
			if (a[j]^a[i]) break;
			if (a[i]<0) s++;
			if (a[i]>0) s=2;
		}
		printf("%s\n",s<2?"YES":"NO");
	}
	return 0;
}

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться