比赛 20120316 评测结果 TAAAAAAATA
题目名称 求和B 最终得分 80
用户昵称 Makazeu 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-03-16 22:28:55
显示代码纯文本
#include <cstdio>
#include <cstdlib>
using namespace std;
int N,M,T;
int Num[1000];
void init()
{
	scanf("%d\n",&T);
	int a,b;
	int Len;
	for(int i=1;i<=T;i++)
	{
		scanf("%d %d\n",&N,&M);
		Len=0;
		for(int j=0;j<=900;j++) Num[j]=0;
		for(int j=1;j<=N;j++)
		{
			scanf("%d %d\n",&a,&b);
			for(int k=a;k<=b;k++)
			{
				int now=k;
				int pos=0;
				while(now)
				{
					Num[++pos]+=now%M;
					now/=M;
				}
				if(Len<pos) Len=pos;
			} 
		}
		long long Ans=0;
		for(int j=1;j<=Len;j++)
		{
			Num[j]%=M;
			int Res=1;
			for(int k=1;k<=j-1;k++) Res*=M;
			Ans+=Num[j]*Res;
		}
		printf("%lld\n",Ans);
	}
}

int main()
{
	freopen("sumb.in","r",stdin);
	freopen("sumb.out","w",stdout);
	init();
	return 0;
}