zoukankan      html  css  js  c++  java
  • Equation

    (Equation)

    这道题目把式子两面移一下项,变为

    [a_1*x_1+a_3*x_3+a_5*x_5=a_2*x_2+a_4*x_4+a_6*x_6 ]

    然后用类似于(meet in the middle)的方法进行对式子两边统计

    为什么当时没有做出来??

    • 时间复杂度分析错了
    • 主要原因还是搜索的答案数弄错了,正解的搜索方案数应该是 (k^3) ,如果考虑重复答案会更少,和 (a_i) 并没有关系,所以要仔细分析程序的时间复杂度
    #include<iostream>
    #include<cstdio>
    #include<vector>
    #include<map>
    #define ll long long
    using namespace std;
    const int N=10,MAXN=1e6+100;
    map<ll,int>m;
    ll k,ans;
    int base;
    ll a[N],b[N];
    int num[MAXN];
    inline void dfs2(int x,ll sum)
    {
    	if (!x)
    	{
    		if (m.find(sum)!=m.end())
    		ans+=num[m[sum]];
    		return ;
    	}
    	for (int i=1;i<=k;i++)
    	dfs2(x-1,sum+b[x]*i);
    	return ;
    }
    inline void dfs1(int x,ll sum)
    {
    	if (!x)
    	{
    		if (m.find(sum)!=m.end()) num[m[sum]]++;
    		else
    		{
    			m[sum]=++base;
    			num[base]=1;
    		}
    		return ;
    	}
    	for (int i=1;i<=k;i++)
    	dfs1(x-1,sum+a[x]*i);
    	return ;
    }
    int main()
    {
    	scanf("%lld",&k);
    	int num1=0,num2=0;
    	for (int i=1;i<=6;i++)
    	if (i%2==1) scanf("%lld",&a[++num1]);
    	else scanf("%lld",&b[++num2]);
    	dfs1(3,0);
    	dfs2(3,0);
    	printf("%lld
    ",ans);
    	return 0;
    }
    

    题外话:不要搞骚操作,多写几个变量,多写几句话死不了。

  • 相关阅读:
    Qt之Threads和QObjects
    Qt之可重入与线程安全
    Qt之线程基础
    Qt之QLineEdit
    Qt之属性系统
    Django框架
    web框架起源
    django查看数据库
    jQuery
    BOM&DOM
  • 原文地址:https://www.cnblogs.com/last-diary/p/11406078.html
Copyright © 2011-2022 走看看