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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

B. Patchouli‘s Magical Talisman #796 div2

發布時間:2024/3/12 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 B. Patchouli‘s Magical Talisman #796 div2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??????Problem - B - Codeforces

題意就是給你序列a,問最小操作可以使a里面的數都是奇數

操作1:選任意兩個數合并

操作2:選一個偶數/2

這個題的思路還是很明朗的,奇數就是0,奇數+偶數必為奇數,序列a中如果存在奇數就是偶數的個數,因為偶數可以不斷加到奇數上面去。但是如果都是偶數怎么辦,這個地方就是貪心了,我一開始思路錯了,想著全部加起來是個偶數,然后每次除以2除到奇數為止。

這個就是貪心的策略了,我這么想得需要證明這個方法的合理性啊,不證明合理性就這么想當然當然會錯,比如32,要除以到奇數得5次,兩個奇數偶數相加得到32,得6次。那如果取兩個偶數先除以2,得到最小的操作次數到奇數,然后把另外的偶數依次加上去,當然這樣更優

所以都是偶數的情況:每個數都除以2到奇數的最小操作次數求出來,先在序列里面找到一個奇數,然后把偶數依次加上去:cnt+n-1

#include<iostream> #include<vector> using namespace std; typedef long long ll; const int N=2e5+10; ll a[N]; int main(){int T;cin>>T;while(T--){ll n,even=0,od=0,sum=0,res=0x3f3f3f3f;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];if(a[i]%2==1) od++;if(a[i]%2==0) even++;sum+=a[i];}if(od&&even){cout<<even<<"\n";continue;}else if(even==0&&od){cout<<"0\n";continue;}else if(od==0&&even){for(int i=1;i<=n;i++){ll cnt=0;while(a[i]%2==0){cnt++;a[i]/=2;}res=min(res,cnt);}cout<<res+n-1<<"\n";}}return 0; }

總結

以上是生活随笔為你收集整理的B. Patchouli‘s Magical Talisman #796 div2的全部內容,希望文章能夠幫你解決所遇到的問題。

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