这次A了两题,颜色又变蓝了,好激动~~
第一题》简单题,排序从头挨着装就行。
第二题》数学题,题意:给出五个点判断是能构成五角星。可以求出5个点,每两个点之间的边,一共有十条边,其中五条边是五角星的边,两外五条是五角星外接正五边形的边,可以画画试试,五角星的边长和正五边形的边长都各自相等,如果有不相等的就不能构成五角星。
代码:
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include<list>
#include<deque>
#define LL long long
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int maxn=300;
struct point
{
double x,y;
}a[10];
double d[25];
int main()
{
int t;
cin>>t;
while(t--){
for(int i=0;i<5;i++)
scanf("%lf%lf",&a[i].x,&a[i].y);
// sort(a,a+5,cmp);
memset(d,0,sizeof(d));
int k=0;
for(int i=0;i<5;i++){
for(int j=i+1;j<5;j++){
d[k++]=sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y));
}
}
sort(d,d+10);
bool flag=true;
for(int i=0;i<4;i++)
if(d[i]-d[i+1]>0.0001||d[i+1]-d[i]>0.0001){
flag=false;
break;
}
for(int i=5;i<9;i++)
if(d[i]-d[i+1]>0.0001||d[i+1]-d[i]>0.0001){
flag=false;
break;
}
if(flag)printf("Yes\n");
else printf("No\n");
}
return 0;
}
图像: