您的位置:首页 > 其它

hdu 5365+hdu 5355

2015-08-10 20:36 267 查看
5365

题目链接:点击打开链接

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

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

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

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

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

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int x,y;
}p[22];
bool cmp(node a,node b){
if(a.x==b.x)return a.y<b.y;
return a.x<b.x;
}
int main()
{
double d[10];
int n,i,j,k,l,ans;
while(scanf("%d",&n)!=EOF)
{
ans=0;
for(i=0;i<n;i++)
scanf("%d%d",&p[i].x,&p[i].y);
sort(p,p+n,cmp);
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
for(k=j+1;k<n;k++)
for(l=k+1;l<n;l++)
{
d[1]=(p[i].x-p[j].x)*(p[i].x-p[j].x)+(p[i].y-p[j].y)*(p[i].y-p[j].y);
d[2]=(p[j].x-p[k].x)*(p[j].x-p[k].x)+(p[j].y-p[k].y)*(p[j].y-p[k].y);
d[3]=(p[k].x-p[l].x)*(p[k].x-p[l].x)+(p[k].y-p[l].y)*(p[k].y-p[l].y);
d[4]=(p[l].x-p[i].x)*(p[l].x-p[i].x)+(p[l].y-p[i].y)*(p[l].y-p[i].y);
d[5]=(p[i].x-p[k].x)*(p[i].x-p[k].x)+(p[i].y-p[k].y)*(p[i].y-p[k].y);
d[6]=(p[j].x-p[l].x)*(p[j].x-p[l].x)+(p[j].y-p[l].y)*(p[j].y-p[l].y);
sort(d+1,d+7);
//	printf("%.2f %.2f %.2f %.2f %.2f %.2f\n",d1,d2,d3,d4,d5,d6);
if(d[1]==d[2]&&d[2]==d[3]&&d[3]==d[4]&&d[4]==d[1]&&d[5]==d[6])ans++;
}
}
printf("%d\n",ans);
}
return 0;
}


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<stdio.h>
#include<string.h>
#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\n",dp
[0]+dp
[1]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: