51nod 搬貨物

這個題目很簡單 用2^i進位就好了 但是讓卡住了 原因是得用輸入掛 。。。。。學習了一波

#include <iostream>
#include <algorithm>
using namespace std;
int arr[1002000];
template <class T>
inline void scan_d(T &ret)
{
    char c;
    ret=0;
    while((c = getchar()) < '0' || c > '9');
    while(c >= '0' && c <= '9')
    {
        ret = ret * 10 + (c - '0'), c = getchar();
   }
}

int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int buff;
        scan_d(buff);
        arr[buff]++;
    }
    int startpoint;
    for(int i=0;i<=1e6+1000;++i)//1e6後面一定要加足夠的數量保證進位能夠成功!剛開始我就寫了1e6+5結果不夠 有兩個wa點
    {
        int buff=arr[i]/2;
        arr[i]%=2;
        arr[i+1]+=buff;
        if(arr[i]) startpoint=i;
    }
    int cnt=0;
    for(int i=startpoint;i>=0;i--)
    {
        if(arr[i]) cnt++;
    }
    cout<<cnt<<endl;
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章