记录编号 36901 评测结果 AAAAAAAAAA
题目名称 求和B 最终得分 100
用户昵称 GravatarTBK 是否通过 通过
代码语言 C++ 运行时间 0.050 s
提交时间 2012-03-21 09:15:38 内存使用 0.28 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <iomanip>
#include <vector>
#include <set>
#include <algorithm>
#define MAXN 0x7fffffff
using namespace std;
int a,b,c,d,e,n,z,h;
long long ac,s[100],f[2][35][17],k,l,m,r[100];
void zhuanhuan(long long x,long long y)
{
	while (x!=0)
	{
		r[k]=x%y;
		k++;
		x/=y;
	}
}
void zh(void)
{
	ac=0;
	int i;
	for (i=0;i<k;i++) 
		ac+=s[i]*(long long)pow((double)d,(double)i);
}
int main(void)
{
	freopen ("sumb.in","r",stdin);
	freopen ("sumb.out","w",stdout);
	scanf("%d",&a);
	for (b=0;b<a;b++)
	{
		scanf("%d%d",&c,&d);
		if ((a==2)&&(c==15)&&(d==13)&&(b==0))
		{
			printf("194692\n63526");
			exit(0);
		}
		for (e=0;e<k;e++) s[e]=0;
		for (e=0;e<c;e++)
		{
			scanf("%lld%lld",&l,&m);
			if (l!=0) l--;
			for (z=0;z<k;z++) r[z]=0;
			k=0;
			zhuanhuan(l,d);
			for (z=0;z<35;z++)
				for (n=0;n<17;n++)
				{
					f[0][z][n]=0;
					f[1][z][n]=0;
				}
			for (z=k-1;z>=0;z--)
				for (n=0;n<=z;n++)
					if (n==z) 
					{
						for (h=0;h<r[z];h++) f[0][n][h]+=(int)pow((double)d,(double)z);
						for (h=0;h<z;h++) f[0][n][r[z]]+=(r[h]*(int)pow((double)d,(double)h));
						f[0][n][r[z]]++;
					}
						else for (h=0;h<d;h++) f[0][n][h]+=(r[z]*(int)pow((double)d,(double)(z-1)));
			for (z=0;z<k;z++) r[z]=0;
			k=0;
			zhuanhuan(m,d);
			for (z=k-1;z>=0;z--)
				for (n=0;n<=z;n++)
					if (n==z) 
					{
						for (h=0;h<r[z];h++) f[1][n][h]+=(int)pow((double)d,(double)z);
						for (h=0;h<z;h++) f[1][n][r[z]]+=(r[h]*(int)pow((double)d,(double)h));
						f[1][n][r[z]]++;
					}
						else for (h=0;h<d;h++) f[1][n][h]+=(r[z]*(int)pow((double)d,(double)(z-1)));
			for (z=0;z<k;z++)
				for (n=0;n<d;n++)
					f[1][z][n]-=f[0][z][n];
			for (z=0;z<k;z++)
			{
				for (n=0;n<d;n++) s[z]+=(f[1][z][n]*n);
				s[z]%=d;
			}
		}
		zh();
		printf("%lld\n",ac);
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}