zoukankan      html  css  js  c++  java
  • 刷题向》一道简单的思路题BZOJ1800(EASY+)

      这道题其实并不难,主要原因是数据范围很小,当然数据如果大来也可以优化,但重点是在做的时候用的思路很通用,

      所以本题是一道思想题(当然思想也不难)

      标题里的“+”体现在一些边界处理中。

      直接甩题目

    Description

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

    Input

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

    Output

    所构成不重复矩形的个数

    Sample Input

    8
    1
    2
    2
    3
    1
    1
    3
    3


    Sample Output

    3

    HINT

    N<= 20

      然后甩代码

     1 /**************************************************************
     2     Problem: 1800
     3     User: PencilWang
     4     Language: C++
     5     Result: Accepted
     6     Time:0 ms
     7     Memory:820 kb
     8 ****************************************************************/
     9  
    10 #include<stdio.h>
    11 int n,a[41],s[41],ans;
    12 void find(int mid,int x)
    13 {
    14     int p=x+1;
    15     while(p<n&&(s[p]-s[mid]<<1)<s[n])++p;
    16     if(p>=n)return ;
    17     if((s[p]-s[mid])<<1==s[n])
    18             ans++;
    19     return ;
    20 }
    21 void fuck(int L,int R)
    22 {
    23     for(int mid=L+1;mid<R;++mid)
    24     find(mid,R);
    25     return ;
    26 }
    27 int main()
    28 {
    29     scanf("%d",&n);
    30     for(int i=1;i<=n;i++)
    31     {
    32     scanf("%d",a+i);
    33     s[i]=s[i-1]+a[i];
    34     }
    35     int L=0,R=1;
    36     while(L<R&&R<=n)
    37     {
    38     if(((s[R]-s[L])<<1)>s[n])L++;
    39     else if(((s[R]-s[L])<<1)<s[n])R++;
    40     else
    41         {
    42         fuck(L,R);
    43         L++;
    44         }
    45     }
    46     printf("%d",ans);
    47     return 0;
    48 }
    49 
  • 相关阅读:
    第三章,DNA序列的进化演变
    哈迪-温伯格定律和近亲杂交
    mysql
    Dajngo admin使用
    Django之Form组件
    python三大器
    python函数
    python文件操作
    python字典和集合
    算法基础
  • 原文地址:https://www.cnblogs.com/PencilWang/p/5972935.html
Copyright © 2011-2022 走看看