求分析时间复杂度!
  • 板块学术版
  • 楼主MnZnOIer
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/5/10 18:45
  • 上次更新2024/5/10 20:46:01
查看原帖
求分析时间复杂度!
677091
MnZnOIer楼主2024/5/10 18:45
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, a;
priority_queue <int, vector <int>, greater <int> > q;
struct Number
{
	int c[20005], l;
	Number (){l = 0, memset (c, 0, sizeof (c));}
	Number operator * (Number a)
	{
		Number s;  
		for (int i = 1; i <= l; ++ i)for (int j = 1; j <= a.l; ++ j)s.c[i + j - 1] += c[i] * a.c[j];
		for (int i = 1; i < l + a.l; ++ i)if (s.c[i] > 9)
		{
			s.c[i + 1] += s.c[i] / 10;
			s.c[i] %= 10;
		}
		s.l = l + a.l;
		while (s.c[s.l] == 0 && s.l > 1)-- s.l;
		return s;
	}
	Number operator + (Number a)
	{
		Number s;
		for (int i = 1; i <= max (l, a.l); ++ i)
		{
			s.c[i] += a.c[i] + c[i];
			if (s.c[i] > 9)
			{
				++ s.c[i + 1];
				s.c[i] %= 10;
			}
		}
		s.l = max (l, a.l);
		if (s.c[s.l + 1])++ s.l; 
		return s;
	}
};
Number change (int a)
{
	int n = 0;
	Number s;
	while (a)
	{
		s.c[++ n] = a % 10;
		a /= 10;
	}
	s.l = n;
	return s;
}
void write (Number a)
{
	for (int i = a.l; i >= 1; -- i)cout << a.c[i];
}
Number ans;
signed main ()
{
	ios::sync_with_stdio (0), cin.tie (0), cout.tie (0);
	cin >> n;
	for (int i = 0; i < n; ++ i)
	{
		cin >> a;
		q.push (a);
	}
	while (q.size () > 1)
	{
		int a, b;
		a = q.top ();
		q.pop ();
		b = q.top ();
		q.pop ();
		q.push (a + b);
		Number c = change (a), d = change (b), sum;
		sum = c * d;
		ans = ans + sum;
	}
	write (ans);
	return 0;
}

重载高精最坏情况下时间复杂度会是多少呢?

2024/5/10 18:45
加载中...