zoukankan      html  css  js  c++  java
  • BZOJ1800 [Ahoi2009]fly 飞行棋 其他

    欢迎访问~原文出处——博客园-zhouzhendong

    去博客园看该题解


    题目传送门 - BZOJ1800


    题意概括

      给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依圆周顺序排列。 请找出这些点中有没有可以围成矩形的,并希望在最短时间内找出所有不重复矩形。


    题解

      点数<=20。

      我们发现,

      圆周上有矩形的充要条件是它的两条对角线一定是它的直径。

      如果不是,那就不会有直角了。

      所以搜素在同一直径上的点对数然后C函数即可。


    代码

    #include <cstring>
    #include <cstdio>
    #include <cstdlib>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    const int N=20+5;
    int n,a[N],cir=0;
    int main(){
    	scanf("%d",&n);
    	for (int i=1;i<=n;i++)
    		scanf("%d",&a[i]),cir+=a[i];
    	if (cir&1){
    		puts("0");
    		return 0;
    	}
    	cir>>=1;
    	int tot=0,sum=0;
    	for (int i=1;i<=n&&sum<cir;i++){
    		int dis=0;
    		for (int j=i;j<=n&&dis<cir;j++)
    			dis+=a[j];
    		if (dis==cir)
    			tot++;
    		sum+=a[i];
    	}
    	printf("%d
    ",(tot-1)*tot/2);
    	return 0;
    }
    

      

  • 相关阅读:
    Vue自定义指令
    Vue实例生命周期
    Vue学习目录
    Vue表单控件绑定
    Vue事件处理
    Vue数组更新及过滤排序
    Vue模板逻辑
    Vue模板内容
    Vue实例对象的数据选项
    Vue组件基础用法
  • 原文地址:https://www.cnblogs.com/zhouzhendong/p/BZOJ1800.html
Copyright © 2011-2022 走看看