zoukankan      html  css  js  c++  java
  • BZOJ 1800 [Ahoi2009]fly 飞行棋

    题目链接

    思路

    终于有一道自己想出来的题了,开心。

    因为是矩形,一定有直角,所以考虑直径,之后由于矩形对角线是两条直径,所以考虑组合数。

    直径有n条,矩形有c(n,2)个。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<map>
     4 using namespace std;
     5 int res,hf,sum[25],a[25];
     6 map<int,int>mp;
     7 long long fac(int k)
     8 {
     9     long long ans=1;
    10     for(int i=1;i<=k;i++)
    11         ans*=i;
    12     return ans;
    13 }
    14 long long cb(int n,int m)
    15 {
    16     return (fac(n)/fac(m))/fac(n-m);
    17 }
    18 int main()
    19 {
    20     int n;
    21     scanf("%d",&n);
    22     for(int i=1;i<=n;i++)
    23     {
    24         scanf("%d",a+i);
    25         sum[i]=sum[i-1]+a[i];
    26         mp[sum[i]]++;
    27     }
    28     if(sum[n]%2!=0)
    29     {
    30         printf("0
    ");
    31         return 0;
    32     }
    33     hf=sum[n]/2;
    34     for(int i=1;i<=n;i++)
    35     {
    36         if(sum[i]>hf)
    37             break;
    38         if(mp[sum[i]+hf])
    39             res++;
    40     }
    41     printf("%lld
    ",cb(res,2));
    42     return 0;
    43 }
  • 相关阅读:
    js原生小小总结(二)
    js原生小小总结(一)
    js原生小小总结
    寻找峰值
    第一个错误的版本
    [JSOI2018] 战争
    CF232E Quick Tortoise
    [JLOI2015] 骗我呢
    CF1428G Lucky Numbers
    CF1239E Turtle
  • 原文地址:https://www.cnblogs.com/fantasquex/p/9379187.html
Copyright © 2011-2022 走看看