首页 > 其他 > 详细

BZOJ 1800 fly-飞行棋

时间:2015-07-12 20:10:41      阅读:214      评论:0      收藏:0      [点我收藏+]

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

BZOJ 1800 fly-飞行棋

原文:http://www.cnblogs.com/szy-wlxy/p/4641405.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!