ああ...
トピックリンクします。https://www.luogu.org/problemnew/show/CF798C
この質問は今、同様の法律を見つけるためにも...天才の最大公約数を書くになります...
操作上の問題は、二つの数に基づいて行われます。
その後、我々はデータのいくつかのセットを見つけるために、手書きの難しい2つの数の動作のみを考慮するかもしれない、すべての2つの数値ABを書き出さ、タスクは、最大2回の操作で完了します。その後、我々はその性質を検討することができます。
AB 2つの数の4つ以下の場合:
偶数、奇数、偶数の後、奇数--------------->操作
奇数、でも--------------->操作が奇数になった後、奇数
偶数、奇数--------------->操作が奇数になった後、奇数
偶数、偶数、偶数の後でも--------------->操作
そう:
元の2つの数字が偶数である場合、オペランドは0です。
元の2つの数字が奇数である場合、1をオペランド。
元の2つの数字が偶数奇数一次にオペランド2である場合。
元のシーケンスは次のようである場合を除いては、このような状況の(3、6)の結果を表示されません。
だから、最後に加えて、いくつかの特殊な文になります
GCDなければならないのn == 1は、1である場合、それは直接出力することができます。
操作は前に1より大きいGCDしていない、との出力を指示することができた場合は、
他の例は、(すでに説明したように、この質問は、解決策なしでは存在しないことに注意してください)...パリティを議論することができます....
ACコード:
1の#include <iostreamの> 2の#include <cstdioを> 3 4 使用して 名前空間STDを、 5 6 int型のn、[ 100005 ]、ANS。 7 8 int型 GCD(int型、int型B){ 9 場合(Bの== 0 ) 10 リターン; 11 リターン GCD(B、%のB)。 12 } 13 14 INT メイン(){ 15 のscanf(" %d個"、&N) 16 以下のために(int型 i = 1 ; iが<= N; iが++ ) 17 のscanf(" %dを"&[I])。 18 であれば(N == 1 ){ 19 のprintf(" YES \ N0の\ n " ); 20 リターン 0 ; 21 } // 特判 22 INT今= GCD([ 1 ]、[ 2 ])。 23 のために(int型 I = 3私は++; iが<= N ) 24 今= GCD([I]、今)。// GCD 25 であれば(今!= 1 ){ 26 のprintf(" YES \ N0する\ n " ); 27 リターン 0 ; 28 } // 特判 29 他{ 30 [N + 1 ] = 0 ; 31 のために(int型 i = 1 ; iが<= N iが++ ){ 32 場合([I]%2 == 1 && [I + 1 ]%2 ==1 ){ 33が ++ ANS ; 34である [Iは+ 1 ] = 0 ; //はさえに操作された、それは任意の偶数に割り当てることができる 35 } 36 他 IF([I]%2 == 1 && A [Iは+ 1 ]%2 == 0)// 偶数奇数1 37 ANS + = 2 ; 38である } 39 のprintf(" YES \%のn-Dの\のN- " 、ANS); 40 } 41が リターン 0 ; 42 }