鱼C论坛

 找回密码
 立即注册
查看: 1252|回复: 8

[已解决]美丽几何

[复制链接]
发表于 2020-12-23 10:57:37 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 727181660 于 2020-12-26 19:42 编辑

在平面上有n个点,初始每个点的美丽值都为0,任意选择两个点组成一条
直线,对于每一条直线,如果存在一个点,这个点到这条直线的距离小于其他
n-3个点到这条直线的距离,那么我们把这个点的美丽值加1。为了简化输出,
我们只需要输出所有点的美丽值的异或值,保证三点不共线。
输入说明
第一行一个正整数n(4<=n<=2000)
接下来n行,每一行有2个正整数x,y。代表一个点的坐标(0<=x,y<=100000000)
输出说明
输出所有点的美丽值的异或值。
输入样例
4
00
01
10
11
4
00
10
12
21
输出样例
0
3
最佳答案
2020-12-24 13:17:40
  1. #include <cstdio>
  2. #include <vector>
  3. #include <cmath>
  4. using namespace std;
  5. typedef pair<int,int> PII;
  6. const int N=2005;
  7. int n,ml[N],res;
  8. double A,B,C;
  9. PII pa[N];
  10. bool b[N];

  11. void line(PII a,PII b){
  12.         if(a.first==b.first){
  13.                 A=1,B=0,C=-a.first;
  14.                 return;
  15.         }
  16.         A=(b.second-a.second)/(b.first-a.first);
  17.         C=a.second-A*a.first;
  18.         A=-A,C=-C,B=1;
  19. }

  20. inline double distance(PII a){
  21.         return fabs(A*a.first+B*a.second+C)/sqrt(A*A+B*B);
  22. }

  23. int func(){
  24.         double dis;
  25.         bool is_min=true;
  26.         for(int i=0;i<n;i++){
  27.                 b[i]=true;
  28.                 for(int j=i+1;j<n;j++){
  29.                         b[j]=true;
  30.                         line(pa[i],pa[j]);
  31.                         for(int m=0;m<n;m++){
  32.                                 if(!b[m]){
  33.                                         b[m]=true;
  34.                                         is_min=true;
  35.                                         dis=distance(pa[m]);
  36.                                         for(int k=0;k<n;k++){
  37.                                                 if(!b[k]&&distance(pa[k])<=dis){
  38.                                                         is_min=false;
  39.                                                         break;
  40.                                                 }
  41.                                         }
  42.                                         if(is_min)
  43.                                                 ml[m]++;
  44.                                         b[m]=false;
  45.                                 }
  46.                         }
  47.                         b[j]=false;
  48.                 }
  49.                 b[i]=false;
  50.         }
  51. }
  52. int main(){
  53.         int a,b;
  54.         scanf("%d",&n);
  55.         for(int i=0;i<n;i++){
  56.                 scanf("%d%d",&a,&b);
  57.                 pa[i]={a,b};
  58.         }
  59.         func();
  60.         for(int i=0;i<n;i++)
  61.                 res^=ml[i];
  62.         printf("%d",res);
  63. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-23 11:17:41 From FishC Mobile | 显示全部楼层
求救求救!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-23 11:50:55 | 显示全部楼层
等大佬吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-23 15:51:40 From FishC Mobile | 显示全部楼层
来人啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-23 17:23:03 From FishC Mobile | 显示全部楼层
大哥大姐们救救孩子吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-24 00:25:59 From FishC Mobile | 显示全部楼层
来个大佬救救我呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-24 13:17:40 | 显示全部楼层    本楼为最佳答案   
  1. #include <cstdio>
  2. #include <vector>
  3. #include <cmath>
  4. using namespace std;
  5. typedef pair<int,int> PII;
  6. const int N=2005;
  7. int n,ml[N],res;
  8. double A,B,C;
  9. PII pa[N];
  10. bool b[N];

  11. void line(PII a,PII b){
  12.         if(a.first==b.first){
  13.                 A=1,B=0,C=-a.first;
  14.                 return;
  15.         }
  16.         A=(b.second-a.second)/(b.first-a.first);
  17.         C=a.second-A*a.first;
  18.         A=-A,C=-C,B=1;
  19. }

  20. inline double distance(PII a){
  21.         return fabs(A*a.first+B*a.second+C)/sqrt(A*A+B*B);
  22. }

  23. int func(){
  24.         double dis;
  25.         bool is_min=true;
  26.         for(int i=0;i<n;i++){
  27.                 b[i]=true;
  28.                 for(int j=i+1;j<n;j++){
  29.                         b[j]=true;
  30.                         line(pa[i],pa[j]);
  31.                         for(int m=0;m<n;m++){
  32.                                 if(!b[m]){
  33.                                         b[m]=true;
  34.                                         is_min=true;
  35.                                         dis=distance(pa[m]);
  36.                                         for(int k=0;k<n;k++){
  37.                                                 if(!b[k]&&distance(pa[k])<=dis){
  38.                                                         is_min=false;
  39.                                                         break;
  40.                                                 }
  41.                                         }
  42.                                         if(is_min)
  43.                                                 ml[m]++;
  44.                                         b[m]=false;
  45.                                 }
  46.                         }
  47.                         b[j]=false;
  48.                 }
  49.                 b[i]=false;
  50.         }
  51. }
  52. int main(){
  53.         int a,b;
  54.         scanf("%d",&n);
  55.         for(int i=0;i<n;i++){
  56.                 scanf("%d%d",&a,&b);
  57.                 pa[i]={a,b};
  58.         }
  59.         func();
  60.         for(int i=0;i<n;i++)
  61.                 res^=ml[i];
  62.         printf("%d",res);
  63. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-26 19:41:56 From FishC Mobile | 显示全部楼层
求根据大神的解题给出解题思路解法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-26 19:49:31 From FishC Mobile | 显示全部楼层
玛了个巴卡 发表于 2020-12-24 13:17

大哥能不能给一些解题思路
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-4 05:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表