这道题其实考察的就是从其中能找到几条直径,因为这次数据范围比较小,所以只需设一个二维数组,记录一下每个点及每个点从零开始的位置,最后定一个变量记录周长,最后用个循环搜一下位置小于周长一半的数据,加上周长的一半后在数组中是否有,若存在k个,则共有k*(k-1)/2个矩形。
代码如下(代码比上述方法稍显麻烦,但基本思路一致):
#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> using namespace std; int i_number,i_temp; int i_place[100000]; int i_total=0,i_side=0; int main() { cin>>i_number; i_place[0]=1; for(int i=0;i<i_number;i++) { cin>>i_temp; i_total=i_total+i_temp; i_place[i_total]=1; } for(int i=0;i<i_total/2;i++) { if(i_place[i]==1) { if(i_place[i_total/2+i]==1) { i_side=i_side+1; } } } cout<<i_side*(i_side-1)/2<<endl; return 0; }