NYOJ109 數列轉換 守恆技巧 數學

2021-06-26 03:59:18 字數 1554 閱讀 4716

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:3

描述

有乙個數列a1

,a2,a3

...an

,每次可以從中任意選三個相鄰的數ai-1

,ai 

, ai+1 ,

進行如下操作(此操作稱為「對ai

進行操作」)

(ai-1

,ai,ai+1

)->(ai-1

+ai,-ai

,ai+ai+1

)給定初始和目標序列,是否能通過以上操作,將初始序列轉換成為目標序列?例如,初始序列(1 6 9 4 2 0)目標序列(7 -6 19 2 -6 6)可經過如下操作:

(1 6 9 4 2 0)->( 1 6 13 -4 6 0)->(1 6 13 2 -6 6)->(7 -6 19 2 -6 6)

請你判斷給定的初始狀態和目標狀態,輸出yes(能夠轉換)或no(不能轉換)

輸入

第一行是乙個正整數n,表示測試資料的組數。(n<=100)

每組測試資料的第一行是乙個整數m(3<=m<=1000),表示該組測試資料的起始狀態與結束狀態都有m個數。

每組測試資料的第二行是m個整數ai(-1000<=ai<=1000),表示起始狀態。

每組測試資料的第三行是m個整數bi(-1000<=bi<=1000),表示終止狀態。

輸出如果能夠轉換,輸出yes

如果不能轉換,輸出no

樣例輸入

2

31 2 3

1 3 2

61 6 9 4 2 0

7 -6 19 2 -6 6

樣例輸出

no

yes

**《世界大學生程式設計競賽高階教程·第一冊》

/*

題目大意:輸入兩行數字,第一行經過變化是否可以變為第二行。變化規律為把任意乙個數字減去本身兩次,與其相鄰的兩個分別加中間的這個數。可以的話,輸出yes,否則輸出no

解題關鍵:守恆規律,兩組資料的乙個前n項和總和是相等的。但是這個不起作用,應該把每一項的前n項和求出來,這樣的操作相當於把操作的數的那一位k s(k-1)與s(k)互換

比如 1 2 3 s1=1 s2=3 s3=6 變化之後為 3 -2 5 s1=3 s2=1 s3=6 也就是說變化第2個相當於s1 和s2互換 加油!!!

time:2014-10-7 11:19

*/#include#include#include#includeusing namespace std;

#define max 1100

int main()

for(int i=1;i<=n;i++)

sort(a+1,a+n);

sort(b+1,b+n);

if(equal(a+1,a+n+1,b+1))

printf("yes\n");

else

printf("no\n");

}return 0;

}

nyoj 109 數列轉換

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 有乙個數列a1 a2,a3 an 每次可以從中任意選三個相鄰的數ai 1 ai ai 1 進行如下操作 此操作稱為 對ai 進行操作 ai 1,ai,ai 1 ai 1 ai,ai,ai ai 1 給定初始和目標序列,是否能通過...

nyoj109 數列轉換

時間限制 3000 ms 記憶體限制 65535 kb 難度 3描述 有乙個數列a1 a2,a3 an 每次可以從中任意選三個相鄰的數ai 1 ai ai 1 進行如下操作 此操作稱為 對ai 進行操作 ai 1,ai,ai 1 ai 1 ai,ai,ai ai 1 給定初始和目標序列,是否能通過以...

nyoj 109 數列轉換

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述有乙個數列a1,a2,a3.an,每次可以從中任意選三個相鄰的數ai 1 ai ai 1 進行如下操作 此操作稱為 對ai進行操作 ai 1,ai,ai 1 ai 1 ai,ai,ai ai 1 給定初始和目標序列,是否能通過以上...