比赛 20140711B班小测 评测结果 WAAWWWWWWAWWWW
题目名称 残酷的数学老师 最终得分 21
用户昵称 绕着指尖 运行时间 0.198 s
代码语言 C++ 内存使用 0.31 MiB
提交时间 2014-07-11 15:37:30
显示代码纯文本
#include <iostream>
#include <cstring>
#include <fstream>

using namespace std;

//#define fin cin
//#define fout cout

ifstream fin;
ofstream fout;

void fun(int *a,int &la,int *b,int lb)
{
	int i, j, c[10][15005], d[15005], ld;

	for (i = 1; i < 10; i++)
	{
		for (j = 0; j < la; j++)
		{
			c[i][j] = a[j] * i;
		}
		for (j = 0; j < la; j++)
		{
			if (c[i][j] >= 10)
			{
				c[i][j+1] += c[i][j] / 10;
				c[i][j] %= 10;
			}
		}
	}

	memset(d,0,sizeof(d));
	for (i = 0; i < lb; i++)
	{
		if (b[i])
		{
			for (j = 0; j < la; j++)
			{
				d[i+j] += c[b[i]][j];
			}
		}
	}
	ld = la + lb - 1;

	for (i = 0; i < ld - 1; i++)
	{
		if (d[i] >= 10)
		{
			d[i+1] += d[i] / 10;
			d[i] %= 10;
		}
	}

	if (d[ld-1] >= 10)
	{
		d[ld] = d[ld-1] / 10;
		d[ld-1] %= 10;
		ld++;
	}

	la = ld;
	for (i = 0; i < la; i++)
	{
		a[i] = d[i];
	}

	return;
}

int main()
{
	fin.open("cruel1.in");
	fout.open("cruel1.out");
	int i, j, a[15005], la, n, b[15005], lb, p;

	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));

	fin >> n >> p;

	la = 0;
	while (n)
	{
		a[la++] = n % 10;
		n /= 10;
	}

	lb = 1;
	b[0] = 1;
	
	while (p != 1)
	{
		if (p % 2)
		{
			fun(b,lb,a,la);
		}
		fun(a,la,a,la);

		p /= 2;
	}
	fun(a,la,b,lb);

	j = 1;
	for (i = la-1; i >= 0; i--)
	{
		fout << a[i];
		if (!(j % 70))
		{
			fout << endl;
		}
	}

	return 0;
}