日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

魔法药水

發布時間:2023/12/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 魔法药水 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

小武的實驗室里有一種魔法藥水,這個藥水有個很奇怪的性質,它只能在盛放的體積為2的冪次時保 持穩定,例如1,2,4,8。所以小武在實驗室里放置了很多容積為2的冪次的瓶子,其中N瓶放有魔法藥 水,第i瓶魔法藥水的體積為2的L[i]次方。這天小武想要收拾一下實驗室,小武想知道最少用多少個瓶 子能把實驗室的藥水裝完。
假設小武有任意2的冪次容積的瓶子,并且每種瓶子的數量足夠使用。

輸入格式

第一行一個正整數N
第二行N個數,表示L[i]

輸出格式

一行一個數表示最少需要多少個瓶子

輸入輸出樣例
輸入 #1
5 1 1 2 3 3
輸出 #1
2
輸入 #2
6 7 6 4 6 7 0
輸出 #2
4
輸入 #3
7 8 6 6 8 2 8 4
輸出 #3
5
說明/提示
數據范圍

對于20%的數據,n<=10
對于44%的數據,n<=100
對于64%的數據,n<=10000
對于76%的數據,n<=100000
對于100%的數據,1<=n<=10610^6106,0<=L[i]<=10610^6106

樣例解釋

對于樣例1
藥水體積依次為2,2,4,8,8,前3個可以裝入一個大小為8的瓶子,后2個可以裝入一個大小為16的瓶 子,最少需要2個瓶子


解題思路

由于2 ^ a + 2 ^ a = 2 ^ ( a + 1 )
并且l[i]最大只有10^6
暴力枚舉a,然后合并


Code

#include <iostream> #include <cstdio>using namespace std;const int maxn = 2000000; int n, ans, k; long long a[maxn], f[maxn + 100];int main(){scanf ("%d", &n);for (int i = 1; i <= n; i++){scanf ("%lld", &a[i]);f[a[i]]++;//記錄a}for (int i = 0; i < maxn; i++)//暴力枚舉a{f[i + 1] += f[i] / 2;//合并2 ^ ians += f[i] % 2;//合并不了,瓶子數 + 1} printf ("%lld", ans); }

總結

以上是生活随笔為你收集整理的魔法药水的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。