比赛 |
20111104 |
评测结果 |
AAEAEEEEEE |
题目名称 |
方程 |
最终得分 |
30 |
用户昵称 |
magic |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2011-11-04 21:33:43 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int k,x;
int gx;
string zh[505][1505];
string basic;
int data[1000];
long long qm(int a,int b,int c);
string splus(string a,string b);
string combine(int n,int m);
long long qm(int a,int b,int c)
{
long long ans;
a=a%c;
ans=1;
while (b>0)
{
if (b%2==1)
{
ans=ans*a%c;
}
b/=2;
a=a*a%c;
}
return ans;
}
string combine(int n,int m)
{
for (int i=1;i<=max(m,n);i++)
{
zh[i][i]='1';
zh[i][0]='1';
}
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
if (i!=j&&i>=j)
{
zh[i][j]=splus(zh[i-1][j],zh[i-1][j-1]);
}
}
}
return zh[n][m];
}
string splus(string a,string b)
{
int p,q,l;
string ans;
for (int i=0;i<=1000;i++)
{
data[i]=0;
}
p=a.length();
q=1;
for (int i=p-1;i>=0;i--)
{
data[q]=a[i]-'0';
q++;
}
p=b.length();
q=1;
for (int i=p-1;i>=0;i--)
{
data[q]+=b[i]-'0';
q++;
}
l=max(a.length(),b.length());
for (int i=1;i<=l;i++)
{
data[i+1]+=data[i]/10;
data[i]%=10;
}
if (data[l+1]>0)
{
l++;
}
for (int i=l;i>=1;i--)
{
ans+=data[i]+'0';
}
return ans;
}
int main()
{
freopen("equationz.in","r",stdin);
freopen("equationz.out","w",stdout);
scanf("%d%d",&k,&x);
gx=qm(x,x,1000);
string w;
w=combine(gx-1,k-1);
cout<<w;
return 0;
}