• CodeVS 2226/BZOJ 1800-飞行棋


    原题

    时间限制: 10 Sec  内存限制: 64 MB

    题目描述

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

    输入

    第一行为正整数N,表示点的个数,接下来N行分别为这N个点所分割的各个圆弧长度

    输出

    所构成不重复矩形的个数

    样例输入

    8
    1
    2
    2
    3
    1
    1
    3
    3


    样例输出

    3

    提示

    N<= 20

    题意

    给出圆上n个点之间的距离,求将所有点一一相连后能组成多少个矩形。

    题解

    BZ千年一遇的大水题呀。。。虽然在CodeVS上提交时惨WA了一次【逃

    先读入点i与点i+1的距离,然后算出圆的周长sum【这个以后会有用的

    然后二重大暴力算出所有点两两之间(i,j;i<j)的距离。

    然后四重枚举四边形的四个顶点,算出答案,完了。

    piapiapia代码:

     1 uses math;
     2 var a:array[0..110,0..110] of longint;
     3 var n,i,j,k,l,ans,x,sum:longint;
     4 begin
     5   readln(n);
     6   for i:=1 to n do
     7   begin
     8     readln(x);
     9     a[i,i+1]:=x;//点i与点i+1之间的距离x
    10     sum:=sum+x;//求圆周长
    11   end;
    12   for i:=1 to n do
    13   for j:=i+2 to n do
    14   a[i,j]:=a[j-1,j]+a[i,j-1];//圆上点两两之间的距离,i+1已知所以不枚举
    15   for i:=1 to n do//顶点1
    16   for j:=i+1 to n do//顶点2
    17   for k:=j+1 to n do//顶点3
    18   for l:=k+1 to n do//顶点4
    19   if (a[i,j]=a[k,l])and(a[j,k]=sum-a[i,l]) then inc(ans);//两对对边分别相等则inc(ans),注意第4条边要用周长减去前3边的长度总和,因为a[l,i]不可取
    20   writeln(ans);
    21 end.
    CodeVS 2226/BZOJ 1800-飞行棋
  • 相关阅读:
    Python对象的永久存储
    今天说车,今天吹一波吉利。
    Python 程序能用很多方式处理日期和时间
    Python爬虫1-数据提取-BeautifulSoup4
    优秀的 Java 爬虫项目?
    用Python复制文件的9个方法
    赵孟頫《心经》高清放大单字
    Java遍历Properties的所有的元素
    javaHttps发送POST请求[亲测可用]
    Burp Post、Get数据包转为上传multipart/form-data格式数据包
  • 原文地址:https://www.cnblogs.com/HAdolf-HQY/p/6346848.html
Copyright © 2020-2023  润新知