求助刚才ABC的E
  • 板块学术版
  • 楼主BMTXLRC
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/4/16 21:54
  • 上次更新2023/10/28 03:32:52
查看原帖
求助刚才ABC的E
380579
BMTXLRC楼主2022/4/16 21:54

调了好久一直没调出来不知道哪错了/kk

似乎不是精度问题,错的蛮多的

//ABC248-E
#include<bits/stdc++.h>
#define int double
using namespace std;
const long long N=1e3+5;
int n,k,cnt=0;
struct Point{int x,y;}a[N];
map<pair<double,double>,int> f;
map<int,int> s1,s2;
signed main(){
    scanf("%lf %lf",&n,&k);
    for(register long long i=1;i<=n;i++) scanf("%lf %lf",&a[i].x,&a[i].y);
    if(k==1){
        printf("Infinity");
        return 0;
    }
    for(register long long i=1;i<=n;i++){
        for(register long long j=i+1;j<=n;j++){
            if(a[i].x==a[j].x){
                int ans=0;
                for(register long long p=1;p<=n;p++) if(a[p].x==a[i].x) ans++;
                if(ans>=k&&s1[a[i].x]==0) cnt++,s1[a[i].x]=1;
            }else if(a[i].y==a[j].y){
                int ans=0;
                for(register long long p=1;p<=n;p++) if(a[p].y==a[i].y) ans++;
                if(ans>=k&&s2[a[i].y]==0) cnt++,s2[a[i].y]=1;
            }else{
                double k=(a[i].y-a[j].y)*1.0/((a[i].x-a[j].x)*1.0);
                double b=a[i].y*1.0-k*1.0*a[i].x;
                int ans=0;
                for(register long long p=1;p<=n;p++){
                    if(fabs(k*1.0*a[p].x+b-a[p].y*1.0)<=0.00001) ans++;
                }
                if(ans>=k&&f[make_pair(k,b)]==0) cnt++,f[make_pair(k,b)]=1;
            }
        }
    }
    printf("%.0lf",cnt);
}
2022/4/16 21:54
加载中...