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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Codeforces Round #796 (Div. 2) B Patchouli‘s Magical Talisman

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

題意:

廣藿香正在制作一個神奇的護身符。 她最初有 n 個魔法令牌。 它們的魔力可以用正整數a1,a2,…,an來表示。 廣藿香可以對令牌執行以下兩種操作。 融合:廣藿香選擇兩個標記,移除它們,并創造一個新的標記,其魔力等于兩個所選標記之和。 減少:廣藿香選擇一個具有偶數魔法力量 x 值的令牌,將其移除并創建一個具有等于 x2 魔法力量的新令牌。 當它們的魔力是奇數時,令牌會更有效。 請幫助廣藿香找出她需要的最少操作次數,以使所有代幣的魔力為奇數。

思路:

操作+貪心

目的是要操作次數最少,貢獻是操作次數。觀察可知減少一個偶數融合操作最多操作一次,而減少操作最少操作兩次,因此我們極端化的想,讓融合操作盡可能多。然而還有其他的一些約束條件:只有當奇數+偶數時結果才為奇,因此融合操作只有當數組內存在奇數時才能操作,因此如果數組中存在奇數,那么總操作數就是偶數的個數。如果數組中全是偶數,那么只能進行減少操作。操作次數就是不斷將該數除2,直到該數為奇數為止,因此減少操作的操作次數與bit有關。我們只需找出除2除到奇數的最少操作的那個偶數,然后貢獻就是除法操作數+偶數個數-1。

一開始WA了一發,因為以為數越小,除法的操作就越少,但事實上并不是這樣

Code:

#include <bits/stdc++.h> using namespace std; const int mxn=2e5+10,mnf=0x3f3f3f3f; #define int long long int n,ok=0,cnt=0,cnt2=0,ans=0,mi=mnf; int a[mxn]; void solve(){ok=0;cnt=0;cnt2=0;ans=0;mi=mnf;scanf("%lld",&n);for(int i=1;i<=n;i++){scanf("%lld",&a[i]);if(a[i]%2==0) cnt++;else ok=1;}//sort(a+1,a+1+n);if(ok) {printf("%lld\n",cnt);return;}else{for(int i=1;i<=n;i++){cnt2=0;while(a[i]%2==0){a[i]>>=1;cnt2++;}mi=min(mi,cnt2);}}ans=cnt-1+mi;printf("%lld\n",ans); } signed main(){int T;scanf("%lld",&T);while(T--) solve();return 0; }

總結

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

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