BZOJ 1800 fly-飞行棋

时间:2023-01-17 13:41:53

       这道题其实考察的就是从其中能找到几条直径,因为这次数据范围比较小,所以只需设一个二维数组,记录一下每个点及每个点从零开始的位置,最后定一个变量记录周长,最后用个循环搜一下位置小于周长一半的数据,加上周长的一半后在数组中是否有,若存在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;
}

感谢各位观看我的博客,如有不足还望指出,谢谢。