這劉汝佳說的。。。
已經好久沒碰數學的我感覺被針對了。。。
ps:題目確實不難,但是都需要動動小腦袋去優化。
輸入正整數n,按從小到大的順序輸出所有形如abcde/fghij = n
的表示式,其中a~j恰好為數字0~9的乙個排列(可以有前導0),2≤n≤79。
樣例輸入:
62樣例輸出:
79546 / 01283 = 62
94736 / 01528 = 62
首先題目中要求a~j
是數字0~9
的乙個排列,這說明這些數字不能重複出現,0~9
恰好都出現且僅出現一次。這是我出錯的地方。
還有,不用列舉所有可能的分子和分母,判斷是否符合規則並且相除等於n,這樣所需要的時間複雜度是\(o(n^2)\),要做大概\(10^8\)次迴圈。簡言之就是利用我們已知的n來減少迴圈次數。
我們可以把等式變形,\(abcde = n \times fghij\),然後我們只需要列舉\(fghij\)就能得到\(abcde\)然後判斷兩個數是否符合規則即可。複雜度降到了線性時間,需要做不到\(10^4\)迴圈。
#include "iostream"
#include "cstdio"
#include "cstring"
using namespace std;
// str是 "abcde / fghij"
char str[14] = ;
// 判斷兩個數是否滿足要求
bool is_vaild() ;
for (int i = 0; i < 13; i++)
}return true;
}// 將整數ab轉換成字串
void to_str(int a, int b)
pos = 12;
while (pos >= 8 && b != 0)
}int main()
if (cnt == 0)
}return 0;
}
輸入n個元素組成的序列s,你需要找出乙個乘積最大的連續子串行。如果這個最大的乘積不是正數,應輸出0(表示無解)。\(1≤n≤18,-10≤si≤10\)。
樣例輸入:
32 4-3
52 5 -1 2 -1
樣例輸出:
case #1: the maximum product is 8.
case #2: the maximum product is 20.
這題沒啥可說的,就是編碼的時候小心點就好了,我他媽wa了七八次。
連續子串行有乙個起始位置,乙個結束位置,遍歷這兩個位置即可。
需要注意的是,序列最長18個,單個元素絕對值最大\(10\),得用long long。
#include "iostream"
#include "cstdio"
using namespace std;
int main()
}printf("case #%d: the maximum product is %lld.\n\n",times,max);
}return 0;
}
輸入正整數k,找到所有的正整數x≥y,使得\(\frac=\frac + \frac\)
樣例輸入:212
樣例輸出:
21/2 = 1/6 + 1/3
1/2 = 1/4 + 1/4
81/12 = 1/156 + 1/13
1/12 = 1/84 + 1/14
1/12 = 1/60 + 1/15
1/12 = 1/48 + 1/16
1/12 = 1/36 + 1/18
1/12 = 1/30 + 1/20
1/12 = 1/28 + 1/21
1/12 = 1/24 + 1/24
根據第一題的思路,我們知道肯定不能遍歷所有的xy,要把等式做些調整,利用上我們已經知道的k來減少迴圈次數。
最後把等式化簡成這樣的形式:\(x=\frac\)
這樣做有幾點好處:
同第一題,利用k減少迴圈次數
減少強轉和小數運算帶來的精度損失(如果很多個分式,會出現精度損失,造成漏掉正確答案的後果)
這樣能縮小y的下界,題目中只說xy是正整數,那麼y就得從1開始迴圈,而這個分式說明了y必須大於k,所以y可以從k+1處開始迴圈。
還有就是y的上界,不能一直迴圈下去,要找到乙個上界來停止y的迴圈。
\[\because x \ge y,\frac=\frac + \frac且k,x,y \in n^+
\\\therefore \frac \le \frac\\
\max(\frac) = \frac+\frac\\
\frac \le \frac\\
y\le 2 k
\]所以y迴圈到\(2k\)即可。
#include "iostream"
#include "cstdio"
#include "vector"
using namespace std;
int main()
printf("%d\n", ans.size());
for (int i = 0; i < ans.size(); i++)
}return 0;
}
你管這叫 PageRank 演算法
一 如果乙個網頁被很多其他網頁鏈結到的話說明這個網頁比較重要,也就是pagerank值會相對較高。二 如果乙個pagerank值很高的網頁鏈結到乙個其他的網頁,那麼被鏈結到的網頁的pagerank值會相應地因此而提高。一 給每個網頁乙個初始pagerank值。二 通過 投票 演算法不斷迭代,直至達到...
簡單的列舉
補一下從前的做題記錄。某天一口氣水了三道簡單的列舉 這三道題的核心思想就是列舉,通過暴力的列舉所有情況來結局題目。總體來說比較不費腦,只需要列舉所有情況就可以了,但是在列舉的 方法上,要注意方法的優化,不然可能會超時的。第一題 uva725 7.1 division 這個題的意思是說輸入正整數n,按...
7 1 簡單列舉
第七章主要講述暴力求解法 許多問題都可以暴力解決 不用動太多腦筋,把所有可能性都列舉出來,然後一一試驗,儘管這樣的方法看起來顯得很 笨 但卻常常是行之有效的 在列舉複雜物件之前,先嘗試著列舉一些相對簡單的內容,如整數,子串等,儘管暴力列舉不用太動腦筋,但對問題進行一定的分析往往會讓演算法更加簡潔,高...