Codeforces 1220Dアレックスとジュリアン(数论)

トピックリンク

問題の意味は:i、jは整数、およびABSの場合まず、あなたに集合Bを与えるために、グラフの定義は、固定小数点整数の集合である - 集合Bに(I j)は、その後、図中のコネクタの存在は、I、Jは、無向エッジ。少なくともこの絵を作るために除去されているどのように多くの要素を尋ねるにおけるBは二部グラフを示しています。

実際に、私は最終的に、この質問は数にカウントされませんわかりませんが、確かではないマップで、唯一の決意部グラフの基本的な方法を使用:奇数ループは存在しません。

この数字は存在しませんどのように奇妙なリングを作るには?

整数Bがある場合は整数2 *、時間残っている場合、我々はBその後、*次いで0との間にエッジが存在する、開始点がゼロである考慮する、また2との間にエッジが存在します0、特異環を形成し、2 *三点。

このことを考慮すると、我々は数Aを選択した場合、奇数環、唯一のA / 2(%2 == 0)/ 4(%4 == 0)のいずれかがあることを見出し...... 、* 2、* 4、......全体が削除します。

しかし、このような考え方は、それはあなたが考えを選択した場合、保持することができ、その後どのような数、難しいことではないまで、見つける、そして唯一の2で割った(ノンストップの数、とする、唯一の思考の方向のためで、答えを見つけることは困難です分割又は0に等しくすることができない、そのような操作の数)及び数に残るします。そのため、その場合には、これらの数字は倍の関係には表示されません。

その後、コードは非常に簡単です

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
typedefの長い 長いLL。
int型 N、NUM [ 100 ]、CNT [ 200010 ]。
LL [ 200010 ]。
 
INT メイン()
{ 
    scanf関数(" %のD "、&N)
    以下のためにint型私= 1 ; iが<= N; iが++)のscanf(" %のLLD "、および[I])。
    以下のためにint型 i = 1 ; iが<= N; iは++ 
    { 
        LLのTEMP =[I]。
        一方、(TEMP && TEMP%2 == 0 
        { 
            CNT [I] ++ ; 
            TEMP / = 2 
        } 
        NUM [CNT [I]] ++ ; 
    } 
    int型の ID = 0 以下のためにint型 i = 1 ; iは<= 63 ; iは++)場合(NUM [I]> NUM [ID])ID = I。
    printf(" %d個の\ n "、N- NUM [ID])。
    以下のためにint型 i = 1 ; iが<= N; iは++します)もし(CNT [I] = ID!)のprintf(" %のLLD " 、[I])。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/BakaCirno/p/11550454.html