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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【贪心】【高精度】zoj3987 Numbers

發布時間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【贪心】【高精度】zoj3987 Numbers 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:給你一個數n,讓你找m個非負整數,使得它們的和為n,并且按位或起來以后的值最小化。輸出這個值。

從高位到低位枚舉最終結果,假設當前是第i位,如果m*(2^i-1)<n的話,那么說明這一位如果填零,剩下的位不論怎么填,都絕對湊不出n來,所以這一位必須填1.如果m*(2^i-1)>=n,這一位就填1,然后把n變為max(n mod 2^i , n-m*2^i),重復這個過程即可。

要用高精度。

import java.util.*; import java.io.*; import java.math.*;public class Main{public static void main(String[] argc){int T;BigInteger n,m;BigInteger[] pw=new BigInteger[4005];pw[0]=BigInteger.ONE;for(int i=1;i<=4001;++i){pw[i]=pw[i-1].multiply(BigInteger.valueOf(2l));}Scanner sc = new Scanner (new BufferedInputStream(System.in));T=sc.nextInt();for(int zu=1;zu<=T;++zu){n=sc.nextBigInteger();m=sc.nextBigInteger();String s=n.toString();int len=s.length();BigInteger ans=BigInteger.ZERO;for(int i=len*4;i>=0;--i){BigInteger tmp=m.multiply(pw[i].subtract(BigInteger.ONE));if(tmp.compareTo(n)==-1){ans=ans.add(pw[i]);BigInteger t=n.subtract(m.multiply(pw[i]));BigInteger t2=n.mod(pw[i]);if(t.compareTo(t2)==1){n=t;}else{n=t2;}}}System.out.println(ans);}sc.close();} }

轉載于:https://www.cnblogs.com/autsky-jadek/p/7773754.html

總結

以上是生活随笔為你收集整理的【贪心】【高精度】zoj3987 Numbers的全部內容,希望文章能夠幫你解決所遇到的問題。

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