设为首页 加入收藏

TOP

hdu 5365+hdu 5355
2015-11-21 00:55:34 来源: 作者: 【 】 浏览:1
Tags:hdu 5365 5355

?

题目大意:给定一些整数点,问这些点能够组成多少个正三角形或者是正方形、正五边形、正六边形。

思路:如果仔细想一想的话,这道题目是根本不存在正三角形、正五边形、正六边形的请款的。(在纸上画图看一看,可以发现确实不行。题目输入是整数点)

所以题目变成:这些点能够组成多少个正方形。看数据范围,n<=20,坐标范围<=8。

题目瞬间简单了,暴力!暴力枚举4个点,然后判断这4个点是否能组成一个正方形。判断是否为正方形的方法很多,向量或者是距离。

我这里用的是算出4个点的距离,还有2个对角线的距离。如果能组成正方形,条件是:4条边长度相同,2条对角线长度相同。

?

#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        using namespace std; struct node{ int x,y; }p[22]; bool cmp(node a,node b){ if(a.x==b.x)return a.y
       
        

?

5366

题目链接:点击打开链接

题目大意:给一些位置,上面可以放木桩。放置条件是两个木桩之间至少要有2个空格的距离。问放n个木桩的放法。

思路:这题可以考虑用dp解决。我们设dp[i][0],dp[i][1]分别为在第i 个位置上不放和放木桩。

考虑dp[i][1]的时候,其左侧两个空位不能放木桩,左侧的第三个位置可放可不放。所以dp[i][1]=dp[i-3][1]+dp[i-3][0]+1。

考虑dp[i][0]的时候,其左侧的的第一个空位可放可不放。所以dp[i][0]=dp[i-1][0]+dp[i-1][1]。

答案就是dp[i][1]+dp[i][0]。

?

#include
         
          
#include
          
            #define LL __int64 LL dp[66][2]; int main() { int n,i,j,k; dp[1][0]=1; dp[0][0]=0; dp[2][1]=1; dp[2][0]=1; dp[3][1]=1; dp[3][0]=2; for(i=4;i<=60;i++) { dp[i][1]=dp[i-3][1]+dp[i-3][0]+1; dp[i][0]=dp[i-1][1]+dp[i-1][0]; } while(scanf(%d,&n)!=EOF) { printf(%I64d ,dp[n][0]+dp[n][1]); } }
          
         


?

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Codeforces Round #315 (Div. 2) .. 下一篇UVALive 7043 International Coll..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: