BZOJ1800: [Ahoi2009]fly 飞行棋

【传送门:BZOJ1800


简要题意:

  有一个圆,并且将这个圆分成n段弧,给出n段弧的长度,相邻的弧之间有交点,求出这些点中能围成多少个矩形


题解:

  O(n4),无脑枚举

  圆内接矩形对角线为直径,并且对边相等,所以对弧相等

  利用这个性质做就可以了,不过要注意细节


参考代码:

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int a[21];
bool v[21][21][21][21];
int main()
{
    int n;
    scanf("%d",&n);
    a[0]=0;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        a[i]+=a[i-1];
    }
    if(a[n]%2==1)
    {
        printf("0\n");return 0;
    }
    int ans=0;
    memset(v,false,sizeof(v));
    for(int i=1;i<=n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            bool b1=false;
            int d1=a[j]-a[i];
            if(d1*2>=a[n]){d1=a[n]-d1;b1=true;}
            if(d1==0) continue;
            for(int x=1;x<=n;x++)
            {
                if(x!=i&&x!=j)
                {
                    for(int y=x+1;y<=n;y++)
                    {
                        if(y!=i&&y!=j)
                        {
                            if(v[i][j][x][y]==true) continue;
                            bool b2=false;
                            int d2=a[y]-a[x];
                            if(d2*2>=a[n]){d2=a[n]-d2;b2=true;}
                            if(d1==d2&&b1==b2)
                            {
                                int t;
                                if(b1==false&&b2==false) t=a[x]-a[i];
                                else if(b1==true&&b2==false) t=a[n]-a[y]+a[i];
                                else if(b1==false&&b2==true) t=a[n]-a[j]+a[x];
                                else continue;
                                if(t==a[n]/2)
                                {
                                    v[i][j][x][y]=true;
                                    v[x][y][i][j]=true;
                                    ans++;
                                }
                            }
                        }
                    }
                }
            }
            
        }
    }
    printf("%d\n",ans);
    return 0;
} 

 

posted @ 2018-01-24 16:32  Star_Feel  阅读(196)  评论(0编辑  收藏  举报