4. 交流的喜悦(二)
题目ID:7717100分
最新提交:
Wrong Answer
0 分
历史最高:
Wrong Answer
0 分
时间限制: 1000ms
空间限制: 262144kB
题目描述
时间:1s 空间:256M
题目描述:
有n个人,每个人都拥有一个喜悦值,接下来,任意三个人之间会进行一次交流,任意三个人交流所获得的贡献为三个人的喜悦值的和,求任意三个人交流所获得的贡献之和
输入格式:
第一行一个整数n
接下来n行,每行一个整数a,表示第i个人的喜悦值
输出格式:
按题目描述输出
样例输入1:
3
2
3
4
样例输出1:
9
约定:
n<=1000
1<=a<=10^100
我的代码:
#include<bits/stdc++.h>
using namespace std;
int n,sul,su[100005];
int sl,s[100005];
string sy;
long long C(int n,int m){
long long k=1;
for(int i=1;i<=n;i++){
k=k*i;
}
for(int i=1;i<=m;i++){
k=k/i;
}
for(int i=1;i<=(n-m);i++){
k=k/i;
}
return k;
}
string sum;
int main(){
cin>>n;
cin>>sum;
sul=sum.size();
for(int i=0;i<sul;i++){
su[sul-i-1]=sum[i]-'0';
}
// for(int j=0;j<sul;j++)
// {
// cout<<su[j];
// }
for(int i=1;i<n;i++){
memset(s,0,sizeof(s));
cin>>sy;
sl=sy.size();
for(int j=0;j<sl;j++){
s[sl-j-1]=sy[j]-'0';
}
// for(int j=0;j<sl;j++)
// {
// cout<<s[j];
// }
sul=max(sul,sl);
for(int j=0;j<sul;j++){
su[j]=s[j]+su[j];
if(su[j]>=10){
su[j+1]++;
su[j]-=10;
}
}
// for(int j=0;j<sul;j++)
// {
// cout<<su[sul-j-1]<<"---";
// }
}
// for(int i=0;i<sul;i++){
// cout<<su[sul-1-i];
// }
int cs=C(n-1,2);
// cout<<cs<<endl;
for (int i=0;i<=sul;++i){
su[i]=su[i]*cs;
}
sul=sul+4; //原理进行高精乘
for (int i=0;i<sul;++i){
if (su[i]>9){
su[i+1]+=su[i]/10;
su[i]%=10;
}//进位
}
while (su[sul-1]==0&&sul>1){
sul--;//判断位数
}
for(int i=0;i<sul;i++){
cout<<su[sul-1-i];
}
return 0;
}
在此处键入或粘贴代码