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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【模拟】杯子

發布時間:2023/12/3 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【模拟】杯子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

杯子

題目大意:

有n個1,現在可以將兩個相同的數加在一起,使數字個數-1,現在要將數字個數控制在k以下(包括k),但可能要多加幾個1,現在問你最少加多少個1

輸入樣例#1

3 1

輸出樣例#1

1

輸入樣例#2

13 2

輸出樣例#2

3

輸入樣例#3

1000000 5

輸出樣例#3

15808

數據范圍

對于50%的數據,N≤10000000;
對于100%的數據,N≤1000000000,K≤1000。

解題思路:

先把n轉換成二進制,然后看看不加1時,可以合成成那幾個數,然后判斷數字個數是否小于k,如果不是,那就把最小的數加到第二大的數,然后合成,以此類推

代碼:

#include<cstdio> using namespace std; typedef long long ll; ll n,k,l,d,num,sum,ans,a[100]; int main() {scanf("%lld %lld",&n,&k);l=1;while (n) {if (n&l) n-=l,a[++num]=l;//取出每個位上的1l<<=1;}d=a[1];//最小位sum=2;//次小位while(num>k+sum-2){ans+=a[sum]-d;//加上當前加的d=(a[sum]<<1);//進一位sum++;//繼續往下}printf("%lld",ans); }

總結

以上是生活随笔為你收集整理的【模拟】杯子的全部內容,希望文章能夠幫你解決所遇到的問題。

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