分割范围Codeforces Round #181 (Div. 2)
每日一貼,今天的內容關鍵字為分割范圍
????標題鏈接
????A ,B雖然是水題,但要是沒想清晰就易容掉進某個坑里。。
????C:預處理出有所可能的和,然后個每個每和分給a b兩個數
????D:競賽的時候標題沒看懂,題意就是說在一個n*n的正方形格網中分割k次有幾種分法,每次分完后剩下的四個子矩形必須為正方形。斟酌到最后可以分割log級別的次數,而且每分割一次,又現出了四個空白的子正方形,天然以可就想到dp,很明顯的子結構啊。我們不妨從小到大結構,每多一層,正方形的巨細就擴展兩倍,dp[i][j]示表前i層,經已畫了k次的總案方數,那么轉移的時候我們只需要枚舉以后層的四個角落各自畫了多少次,然后釀成一個兩倍巨細的正放形(多畫一步)。天然不能四重循環去枚舉,間中要套一個的d【】組數來多進行一次小DP,算是DP套著DP吧。
????E:求滿意p!%(a1!*a2!*a3!*...*ak!)=0;的最小的p。k的范圍是100w,a[i]的范圍是1000w.
????沒什么難想的,就是考你有沒有把握什么速快解分質因子的法方。。。。
????學了一種歐拉法篩,,可以在線性時間內篩選出素數,還可以失掉個每數的最小質因子lp[i]。
????http://wenku.baidu.com/view/542961fdba0d4a7302763ad5.html
????O(n)明證的關鍵是個每數只會被篩一次
????然后接下來的問題就是怎么利用lp[i]來解分這100w個數,其實這一步的算計量跟數的個數關無,跟數的巨細有關。
????我們可以用一個組數cnt[i]示表i這個素數現出的次數,那么接下來這段代碼就是精華了。
for(int i = 0; i < n; i++) scanf("%d",&a[i]),cnt[a[i]]++,sum+=a[i];for(int i = M - 10; i >= 2; i--) cnt[i] += cnt[i+1];for(int i = M - 10; i >= 2; i--){if(lp[i]!=i) cnt[lp[i]] += cnt[i];cnt[i/lp[i]] += cnt[i];}????自己研討研討還是挺樂快的。。。。。
????
每日一道理漫漫人生路,誰都難免會遭遇各種失意或厄運。在凄風苦雨 慘霧愁云的考驗面前,一個強者,是不會向命運低頭的。風再冷,不會永遠不息;霧再濃,不會經久不散。風息霧散,仍是陽光燦爛。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long lld; const int maxn = 1000010; const int M = 10000010; int a[maxn]; int prime[M]; int lp[M]; lld cnt[M]; int tot; void init() // precalc in O(n) and get lp[i](the minimum prime factor of i) {for(int i = 2; i <= M-10; i++){if(!lp[i]){lp[i] = i;prime[tot++] = i;}for(int j = 0; j < tot && i*prime[j]<=10000000; j++) {lp[i*prime[j]] = prime[j];if(i%prime[j]==0) break;}} } bool check(lld mid) {for(int i = 0;i < tot; i++){lld tmp = mid,sum=0;while(tmp) {tmp /= prime[i];sum += tmp;}if(sum < cnt[prime[i]]) return false; }return true; } int main() {init();int n;scanf("%d",&n);lld sum = 0;for(int i = 0; i < n; i++) scanf("%d",&a[i]),cnt[a[i]]++,sum+=a[i];for(int i = M - 10; i >= 2; i--) cnt[i] += cnt[i+1];for(int i = M - 10; i >= 2; i--){if(lp[i]!=i) cnt[lp[i]] += cnt[i];cnt[i/lp[i]] += cnt[i];}lld l = 1 , r = sum , best = -1;while(l <= r) {lld mid = l + r >> 1;if(check(mid)) {best = mid;r = mid - 1;} else {l = mid + 1;}}printf("%I64d\n",best);return 0; }
文章結束給大家分享下程序員的一些笑話語錄: 一個程序員對自己的未來很迷茫,于是去問上帝。
"萬能的上帝呀,請你告訴我,我的未來會怎樣?"
上帝說"我的孩子,你去問Lippman,他現在領導的程序員的隊伍可能是地球上最大的"
于是他去問Lippman。
Lippman說"程序員的未來就是駕馭程序員"
這個程序員對這個未來不滿意,于是他又去問上帝。
"萬能的上帝呀,請你告訴我,我的未來會怎樣?"
上帝說"我的孩子,你去問Gates,他現在所擁有的財產可能是地球上最多的"
于是他去問Gates。
Gates說"程序員的未來就是榨取程序員"
這個程序員對這個未來不滿意,于是他又去問上帝。
"萬能的上帝呀,請你告訴我,我的未來會怎樣?"
上帝說"我的孩子,你去問侯捷,他寫的計算機書的讀者可能是地球上最多的"
于是他去問侯捷。
侯捷說"程序員的未來就是誘惑程序員"
這個程序員對這個未來不滿意,于是他又去問上帝。
"萬能的上帝呀,請你告訴我,我的未來會怎樣?"
上帝搖搖頭"唉,我的孩子,你還是別當程序員了")
轉載于:https://www.cnblogs.com/xinyuyuanm/archive/2013/04/30/3052121.html
總結
以上是生活随笔為你收集整理的分割范围Codeforces Round #181 (Div. 2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中医能治疗好女性输卵管迂曲吗?
- 下一篇: 北京环球影城需要存包吗