【题库】交流的喜悦

题目ID【7717】
题目描述:

有n个人,每个人都拥有一个喜悦值,接下来,任意三个人之间会进行一次交流,任意三个人交流所获得的贡献为三个人的喜悦值的和,求任意三个人交流所获得的贡献之和

输入格式:

第一行一个整数n

接下来n行,每行一个整数a,表示第i个人的喜悦值

输出格式:

按题目描述输出

样例输入1:

3

2

3

4

样例输出1:

9

约定:

n<=1000

我的代码

#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;
}

本蒟蒻不知道这题的规律,求大佬帮助 :innocent:

1 个赞

for(int j=0;j<y;j++){
s[j]=(x-1)(x-2)/2;
}
(x指n,y则是当前数的长度)主要规律 :no_mouth:

1 个赞

谢谢大佬,A了A了