れんがを運ぶ

1656 ワード

れんがを運ぶ
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 4646    Accepted Submission(s): 1060
Problem Description
  明ちゃんは今、人に爱されていて、花に花が咲いている高富帥で、一日中美人に囲まれた笙歌妙舞に浸っています.しかし、人々は知らないで、春風の得意な明ちゃんもかつて苦しい奮闘史を持っていました.
  その时の明ちゃんはまだ长い髪を切っていないで、クレジットカードがなくて彼女がなくて、24时间のお汤の家がなくて、しかし当初の明ちゃんはそんなに楽しくて、破れた木のギターさえありませんが...
  楽しいのは、その時の明ちゃんが逆襲の夢を抱いていたからだ.ある日、明ちゃんは彼の心の中の女神に誕生日プレゼントを買うために、ある建築現場に来てレンガを運んでお金を稼いだ.この時、工事現場からトラックのレンガが運ばれてきて、請負業者は明ちゃんにトラックを降ろしたレンガを一つに分けさせました(どんな2つの回転も分けなければなりません).ベテランの運搬工として、明ちゃんはいつもレンガの山を2つに分けています.この時、消耗した体力は分けた後のレンガの数の差です.
  今、トラックから運ばれてきたレンガの数を知っていますが、明ちゃんに最低どれだけの体力をかけて包工頭が要求した任務を完成できるか教えてください.
 
Input
入力データの最初の行は正の整数T(T<=100)であり、T組のテストデータがあることを示す.
次のT行は行ごとに正の整数N(N<=1億円)で、トラックが運んできたレンガの数を示しています.
 
Output
各グループのデータについて、明ちゃんがタスクを完了するのに必要な最小限の体力数を出力してください.
 
Sample Input
2 4 5
 
Sample Output
0 2
 
 #include #include  #include  #include  #include  using namespace std; int n,m,i,j,k;int a[5000005];void cmp() {     int i,j,k;     a[0]=0;a[1]=0;a[2]=0;      for(i=3;i<5000003;i++)     {                        if(i%2==1)           a[i]=a[i/2]+a[i-i/2]+1;         else           a[i]=a[i/2]+a[i-i/2];                   } }  int main() {     cin>>m;     cmp();     while(m--)     {         cin>>n;         if(n==1||n==0)cout<         else         {    if(n%2==0)         cout<         else cout<         }     }     return 0; }