国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

POJ - 1840 Eqs解題報告

2019-11-08 02:00:07
字體:
來源:轉載
供稿:網友
題目大意:對于給定的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<iostream>#include<string.h>#include<algorithm>#include<math.h>#define N 110#define MOD 1000000using namespace std;int a[6]={0};int x[N]={0};int s[N*N*N]={0};int hash[N*N*N]={0};int next[N*N*N]={0};/*int find(int x){	int ss=0;	for(int i=0;i<=MOD;i++)	{		if(x==s[i])ss++;	}	return ss;}*/int my_find(int x){	int u=(((long long)x*(long long)x)%MOD)+1;	u=hash[u];	int z=0;	while(u)	{		if(s[u]==x)		{			z++;		}		u=next[u];	}	return z;}void ceshi(){	for(int i=0;i<1000000;i++)	{		cout<<hash[i]<<" ";	}}int main(){	int n=0;	for(int i=-50;i<=50;i++)	{		if(i==0)continue;		x[n]=i*i*i;		n++;	}	for(int i=1;i<=5;i++)cin>>a[i];	int l=1;	for(int i=0;i<n;i++)	{		for(int j=0;j<n;j++)		{			for(int k=0;k<n;k++)			{								int v=0;				s[l]=a[1]*x[i]+a[2]*x[j]+a[3]*x[k];				v=((long long)s[l]*(long long)s[l])%MOD+1;				next[l]=hash[v];				hash[v]=l;				l++;			}		}	}	int sum=0;	for(int i=0;i<n;i++)	{		for(int j=0;j<n;j++)		{			int t=a[4]*x[i]+a[5]*x[j];			sum=sum+my_find(-t);//在s數組中查找是否有-t.		}	}	//ceshi();	cout<<sum;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淮阳县| 吴堡县| 盐山县| 无为县| 阿克陶县| 佛教| 贵定县| 尼玛县| 陕西省| 佳木斯市| 韶山市| 广安市| 龙南县| 广汉市| 凤山县| 调兵山市| 灵山县| 大同县| 新建县| 万州区| 义马市| 金门县| 九寨沟县| 广宁县| 崇文区| 西吉县| 霞浦县| 徐汇区| 涿州市| 长春市| 徐水县| 湖北省| 德令哈市| 清原| 屯留县| 浮梁县| 仁寿县| 杂多县| 黄平县| 台东县| 攀枝花市|