记录编号 |
69565 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[金陵中学2007] 最优分解方案 |
最终得分 |
100 |
用户昵称 |
raywzy |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.003 s |
提交时间 |
2013-09-18 13:50:05 |
内存使用 |
0.32 MiB |
显示代码纯文本
#include<fstream>
#include<string>
#include<cstring>
using namespace std;
ifstream fin("best.in");
ofstream fout("best.out");
int o[2000],n;
string HP(string A,string B)
{
int a[2000],b[2000],c[2000];
memset(c,0,sizeof(c));
int LA,LB,LC,i,j;
string C;
LA=A.length();
LB=B.length();
for(i=LA-1;i>=0;i--)
a[LA-i]=int(A[i]-48);
for(i=LB-1;i>=0;i--)
b[LB-i]=int(B[i]-48);
for(i=1;i<=LA;i++)
for(j=1;j<=LB;j++)
{
c[i+j-1]+=a[i]*b[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
LC=LA+LB;
C="";
while(c[LC]==0&&LC>1)
LC--;
for(i=LC;i>=1;i--)
C+=char(c[i]+48);
return C;
}
string bianhuan(int x)
{
int i;
int a;
a=x;
string A;
string C;
A="";
C="";
int LA;
while(a>0)
{
A+=char(a%10+48);
a=a/10;
}
LA=A.length();
for(i=LA-1;i>=0;i--)
{
C+=A[i];
}
return C;
}
int main()
{
fin>>n;
string ANS;
string K;
int i;
int flag=2;
int yushu=0;
int counter=1,temp;
while(n>0)
{
if(flag<=n)
{
o[counter]=flag;
counter++;
}
if(n-flag<0)
{yushu=n;}
n-=flag;
flag++;
}
temp=counter-1;
while(yushu>0)
{
o[temp]++;
temp--;
yushu--;
if(temp==0)
temp=counter-1;
}
ANS=bianhuan(o[1]);
for(i=2;i<=counter-1;i++)
{
K=bianhuan(o[i]);
ANS=HP(ANS,K);
}
fout<<ANS<<endl;
return 0;
}