WA in Subtask#1,求调
查看原帖
WA in Subtask#1,求调
1394462
fightCXT123楼主2024/11/13 21:31

源码:

#include <bits/stdc++.h>
using namespace std;

void pre()
{
#ifndef ONLINE_JUDGE
	freopen("lg.in", "r", stdin);
	freopen("lg.out", "w", stdout);
#endif
}

int n;
vector<int> vec;

int sigma(int num)
{return ((num * (num + 1)) >> 1) - 1;}

int bs(int l, int r)
{
	int ret = 0;
	while (l <= r)
	{
		int mid = (l + r) / 2;
		if (sigma(mid) <= n)
			ret = mid, l = mid + 1;
		else
			r = mid - 1;
	}
	return ret + 1;
}

void print(int val)
{cout << val << ' ';}

class Bigint
{
	int len;
	int a[10000];
public:
	
	Bigint(int x = 0)
	{
		memset(a, 0, sizeof(a));
		for (len = 1; x; len++)
		{
			a[len] = x % 10;
			x /= 10;
		}
		len--;
	}
	
	int& operator[](const int bid)
	{return a[bid];}
	
	void flatten(int l)
	{
		len = l;
		for (int i = 1; i <= len; i++)
		{
			a[i + 1] += a[i] / 10;
			a[i] %= 10;
		}
		while (!a[len])
			len--;
	}
	
	Bigint operator*(const int n)
	{
		Bigint ret;
		for (int i = 1; i <= len; i++)
			ret[i] = a[i] * n;
		ret.flatten(len + 11);
		return ret;
	}
	
	void print()
	{
		for (int i = len; i >= 1; i--)
			cout << a[i];
	}
};

Bigint ans(1);
void solve(int val)
{ans = ans * val;}

int main()
{
	pre();
	cin >> n;
	if (n == 3)
	{
		cout << 3 << endl << 3;
		return 0;
	}
	int t = sigma(bs(1, n)) - n;
	int t2 = bs(1, n);
	bool flag = false;
	if (t == 1)
		t = 2, flag = true;
	for (int i = 2; i <= t2; i++)
		if (i != t)
			vec.push_back(i);
	if (flag)
		vec[t2 - 2]++;
	for_each(vec.begin(), vec.end(), print);
	for_each(vec.begin(), vec.end(), solve);
	cout << endl;
	ans.print();
	return 0;
}

pre函数是为了自己用文件调试,请忽略

2024/11/13 21:31
加载中...