除了测试点7以外全过,大佬救救
  • 板块P1591 阶乘数码
  • 楼主kdurnd
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/6 22:59
  • 上次更新2023/12/7 03:40:25
查看原帖
除了测试点7以外全过,大佬救救
1140921
kdurnd楼主2023/12/6 22:59
#include<iostream>
#include<utility>
#define maxn 2600

using namespace std;

pair<int, int> times[12]; //储存每一次的阶乘数 和 数码
int arr[maxn] = { 1 };//计算阶乘
int temp[maxn];//辅助计算阶乘
int ans[12];//存储每一次询问的答案
short T[1005];//T[i] = a 表示第a次询问时的第一个数
int Max;//需要求到的最大阶乘数

void mul(int a[], int x)//高精乘
{
	for (int i = 0; i < maxn; i++)
	{
		a[i] *= x;
		if (i)
		{
			a[i] += temp[i - 1];
		}			
		temp[i] = a[i] / 10;
		a[i] %= 10;
	}
}

void jc(int n)//阶乘
{
	for (int i = 1; i <= n; i++)
	{
		mul(arr, i);
		if (T[i])
		{
			int j = maxn;
			while (!arr[--j]);
			for (; j >= 0; j--)
			{
				if (arr[j] == times[T[i]].second)
					ans[T[i]]++;
			}
		}
	}
}

int main()
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> times[i].first >> times[i].second;
		T[times[i].first] = i;
		Max = Max > times[i].first ? Max : times[i].first;
	}
	jc(Max);
	for (int i = 1; i <= n; i++)
		cout << ans[i] << endl;
	return 0;
}
2023/12/6 22:59
加载中...