題目大意:
對於給定的a1,a2,a3,a4,a5[-50,50]。讓你求出方程a1·x1^3+a2·x2^3+a3·x3^3+a4·x4^3+a5·x5^3=0的解([-50,50]範圍內)的個數。
思路:
如果只是簡單地列舉範圍內的所有的數,那麼,100^5=10^10肯定是超時了。優化方法:用列表法首先寫出x^3的所有可能值(100個),再求出所有a1·x1^3 + a2·x2^3+ a3·x3^3的可能值(n^3),並排序(n^3)*(log(n^3))。和所有a4·x4^3+ a5·x5^3的可能值(n^2),然後列舉所有a4·x4^3+ a5·x5^3的可能值,二分查詢a1·x1^3 + a2·x2^3+ a3·x3^3的可能值中是否存在對應解(n^2)*(log(n^3))。
總時間複雜度為:(n^3)(log(n^3))。
然後寫到一半發現,二分還是慢,雜湊表更快,而且不需要排序,只需要o(n^3)。
#include#include#include#include#define n 110
#define mod 1000000
using namespace std;
int a[6]=;
int x[n]=;
int s[n*n*n]=;
int hash[n*n*n]=;
int next[n*n*n]=;
/*int find(int x)
return ss;
}*/int my_find(int x)
u=next[u];
} return z;
}void ceshi()
{ for(int i=0;i<1000000;i++)
{ cout<>a[i];
int l=1;
for(int i=0;i
poj解題報告 1328
不得不說,這題是讓我飽受折磨,畢竟第一次做貪心演算法,而且wa了好多次,幸好有學長的幫助,最終找到了問題所在,是在快排上是問題,double高位不可向int低位轉換,由於一開始強制轉換導致雖然樣例和其他的測試資料過了,但還是wa,現在改完了就對了,附上ac ps 這題通過率是22 真心不簡單 如下 ...
poj解題報告 2586
這題我是用的貪心演算法,其實不用也可以,列舉也能解決,因為情況不多。因為是每連續5個月必有虧損,而一年只有1 5,2 6,3 7,4 8 8 12共8種情況。現在設盈餘為s,虧損為d,可列出以下幾種情況。ssssdssssdss 4ssssddsssddss 3s 2d ssdddssdddss 2...
poj解題報告 2635
這題特別好理解,就是 坑啊。題意就是給乙個數,這個數是兩個大素數的積,再給出乙個數,如果最小的素數比給的數大,列印good,否則列印bad和最小的素數。這題用的方法是高精度求模 同餘模定理。還有素數打表,把10 6內的素數全部預打表,在求模時則列舉到小於l為止。注意打表不能只打到100w,要保證素數...