BZOJ 1800 fly-飞行棋

       这道题其实考察的就是从其中能找到几条直径,因为这次数据范围比较小,所以只需设一个二维数组,记录一下每个点及每个点从零开始的位置,最后定一个变量记录周长,最后用个循环搜一下位置小于周长一半的数据,加上周长的一半后在数组中是否有,若存在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;
}
感谢各位观看我的博客,如有不足还望指出,谢谢。
原文地址:https://www.cnblogs.com/szy-wlxy/p/4641405.html