d. 進製轉換
單測試點時限:2.0 秒
記憶體限制:256 mb
「他覺得乙個人奮鬥更輕鬆自在。跟沒有幹勁的人在一起廝混,只會徒增壓力。」
qq 小方決定乙個人研究研究進製轉換。
很快,qq 小方就遇到問題了。他現在想知道在十進位制範圍 [l,r] 內有多少整數滿足在 k 進製下末尾恰好有 m 個 0 。
比如在十進位制下的 24 在二進位制下是 11000 ,我們稱十進位制下的 24 在二進位制下末尾恰好有 3 個 0 。
qq 小方一籌莫展,你能幫他解決問題嗎?
第一行包含乙個整數 t (1≤t≤105 ) 表示資料組數。
對於每組資料報含一行,四個整數 l,r,k,m ( 1≤l≤r≤1018 , 2≤k,m≤100 ),含義如題目所述。
對於每組資料輸出一行,包含乙個整數,表示答案。
input
2
1 10 2 3
1 100 2 3
output
1
6
例如,在 100 進製下,末位是 90 的數不算作有末尾 0 。
這題真的偏數論,數學太差了只能說
題解是某個數
能被k^m整除,但是不能被k^(m+1)整除
直接就是在區間內能被k^m整除的個數減去能被k^(m+1)整除個數
#includeusing namespace std;
typedef long long ll;
ll l,r,k,m;
int main()
ll d=pow(k,m);
ll d1=pow(k,m+1);
ll ans=0;
ans=r/d-(l-1)/d;
ans=ans-(r/d1-(l-1)/d1);
printf("%lld\n",ans);
}}
f. 方差
單測試點時限:2.0 秒
記憶體限制:256 mb
「放棄不難,但堅持一定很酷。」
qq 小方已經在體育館苦練一天射箭了,但他還在堅持。
qq 小方每天都要在朋友圈曬自己的訓練記錄。他一共進行了 n 次射箭,成績分別是 x1,x2,⋯,xn。為了表現自己的發揮十分穩定,qq 小方決定選出其中的 m 次成績,使得他們的方差是所有可以選擇的方案中最小的。
對於 m 個元素組成的數列 a1,a2,⋯,am,我們知道他們的方差 σ2=(a1−a¯)2+(a2−a¯)2+⋯+(am−a¯)2m ,其中 a¯=a1+a2+⋯+amm。
但是這個問題對 qq 小方來說太難了,你需要去幫助 qq 小方。
為了方便,現在你需要輸出這個最小的 σ2 乘以 m2 以後的結果。
輸入一行包含兩個正整數 n (1≤n≤106) 和 m (1≤m≤n)。接下來一行包含 n 個整數 x1,x2,⋯,xn (1≤xi≤103)。
輸出一行包含乙個整數,表示答案。為了方便,我們需要輸出最小的 σ2 乘以 m2 以後的結果。
input
5 3output1 2 3 4 5
6都是數論好題呀;
看官方題解:
像這類一般都是與字首和有關。
排序加列舉就可以了
#include#include#includeusing namespace std;
typedef long long ll;
const int n=1e6+10;
ll a[n],n,m;
ll sum[n],sum1[n];
int main()
ll x=sum1[m]-sum1[0];
ll y=sum[m]-sum[0];
ll mi=m*x-y*y;
// cout<
for(int i=1;i+m-1<=n;i++)
cout<
}
Codeup1950 問題 D 進製轉換
題目鏈結 題目描述 將m進製的數x轉換為n進製的數輸出。輸入 輸入的第一行包括兩個整數 m和n 2 m,n 36 下面的一行輸入乙個數x,x是m進製的數,現在要求你將m進製的數x轉換成n進製的數輸出。輸出 輸出x的n進製表示的數。樣例輸入 10 2 11樣例輸出 1011 include inclu...
進製轉換記錄,PAT B1022 D進製的A B
迴圈處理 其中的x是為p進製的數字,如二進位制10001之類的,product我暫時理解為權重,y為最終十進位制結果 while的每一輪取出x的最後一位數字乘上權重,然後加到y上,然後x自除10,product權重增加,這樣下一輪x 10又可以取到x當前的最後一位 int y 0,product 1...
EOJ 2019 2月賽 D 進製轉換
求乙個區間l,r中,在k進製表示下末尾恰有m個0的數字個數。末尾有m個0,就表示的是k m的倍數,基本容斥,就是ans x k m x k m 1 include include include include include include include include include incl...