ZJNU 2356 - 六学家
Posted stelayuri
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZJNU 2356 - 六学家相关的知识,希望对你有一定的参考价值。
“选出来三个六学家,他们的编号是i,j,k,满足i<j<k,且a[k]=a[j]-a[i]”
所以输入第i个数a[i]时,直接让答案加上前i-1个数中能构成差值为a[i]的数量即可
然后让此时输入的数作为上式中的a[j],将i-1到1作为a[i],列出i-1个可能的a[k]存起来即可
时间复杂度为O(n*n/2)
1 #include<bits/stdc++.h> 2 using namespace std; 3 int ar[2005],cha[400005]; 4 int main(){ 5 ios::sync_with_stdio(0); 6 cin.tie(0);cout.tie(0); 7 int n,i,j,ans=0; 8 cin>>n; 9 if(n<3){ 10 cout<<0<<endl; 11 return 0; 12 } 13 memset(cha,0,sizeof cha); 14 cin>>ar[0]>>ar[1]; 15 cha[ar[1]-ar[0]+200000]=1; 16 for(i=2;i<n;i++){ 17 cin>>ar[i]; 18 ans+=cha[ar[i]+200000]; 19 for(j=0;j<i;j++) 20 cha[ar[i]-ar[j]+200000]++; 21 } 22 cout<<ans; 23 24 return 0; 25 }
以上是关于ZJNU 2356 - 六学家的主要内容,如果未能解决你的问题,请参考以下文章
C 六学家的困惑 YY (2019年华南理工大学程序设计竞赛(春季赛))
代码源 Div1 - 106#456. 选数(抽屉原理) POJ2356