洛谷CF798CマイクとGCD問題

ああ...

 

トピックリンクします。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 }
ACコード

 

おすすめ

転載: www.cnblogs.com/New-ljx/p/11237320.html