BestCoder Solution



BestCoder Solution

1001 Fxx and string

枚举i\:i\:和等比数列公比q\:q\:,但考虑到q\:q\:有可能是1/t\:1/t\:的形式,所以倒过来枚举一遍就可以了。

1002 Fxx and game

Fi\:F_i\:表示将i\:i\:变为1\:1\:的最少步骤,如果ki,Fi=min{Fj,Fik}\:k|i,F_i=min{F_j,F_{\frac{i}{k}}},否则Fi=min{Fj}\:F_i=min{F_j},其中itji1\:i-t\leq j\leq i-1

用单调队列维护一下就好了。

时间复杂度O(n)\:O(n)

1003 Fxx and tree

考虑从上往下贪心,要将整棵树翻白,有唯一的方案。于是我们只考虑翻了多少个正确的点。

fx\:f_x\:表示还有nx\:n-x\:个正确的点没有翻需要的期望步数。注意到翻到一个错误的点后,必须要再翻一次这个点才能挽回。于是我们可以列出一个方程。

f_0=f_1+1,f_i=\frac{i}{n}f_{i-1}+\frac{n-i}{n}f_{i+1}+1,f_n=0

用高斯消元求出解就行了。每组数据复杂度O(n3)\:O(n^3)

1004 Fxx and factory

假设经过一轮操作后本来从左到右第i\:i\:个桶变为了第pi\:p_i\:个,我们将n\:n\:个桶抽象为n\:n\:个点,并在所有的i\:i\:pi\:p_i\:中连一条边,那么我们一定会得到若干个环(包括自环)。

由第一类斯特林数可以证明当3\:3\:操作无限时,环的数量是log(n)\:log(n)\:级别的。又由于3\:3\:操作数量对于n\:n\:的数量是很大的且数据随机,所以我们可以得到在本题中环的数量是log\:log\:级别的。

对于每条i>pi\:i->p_i\:的边,这条边上有若干1,2\:1,2\:操作,对于每条边我们记录两个量flag,val\:flag,valflag=0flag=0\:表示这条边有没有2\:2\:操作,否则表示有,valval\: 表示这条边最后一个2\:2\:操作后所有1\:1\:操作的加数的和。

现在来考虑每一个桶,经过k\:k\:轮后的值,其实就是在图上的一个点经过k\:k\:条边,如果这k\:k\:条边的flag\:flag\:都为0,那么我们直接把这k\:k\:条边的val\:val\:相加即可,否则我们把最后一个flag=0\:flag=0\:的边之后的val\:val\:相加即可。

那么我们现在就可以对每一个环预处理出经过1len\:1-len\:轮后的最大值,lenlen\:为环的长度,这个直接用数组记录就好了,当k>len\:k>len\:时,我们可以由k%len\:k\%len\:klen\:\frac{k}{len}\:得出来。

查询的话直接扫每一个环就行了,总复杂度O(n2+Qlogn)\:O(n^2+Qlogn)\:


Read full article from BestCoder Solution


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts