您的位置:首页 > 其它

noip2016题解

2018-11-05 21:50 267 查看

没有正解,都是我的暴力

T1玩具谜题

模拟

#include<iostream>
#include<cmath>
#include<ctime>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 20
using namespace std;

int T;

int n,m;

bool flag,Kill
,s
;

double x
,y
,A

,B

;

int gcd(int x,int y)
{
return y==0?x:gcd(y,x%y);
}

void slove(int a,int b)
{
//    cout<<"AAA"<<endl;
int x1,x2,x3,x4,y1,y2,k1,k2,bb;
x1=x[a]*100;x2=x[b]*100;
x3=x1;x4=x2;x1=x1*x1;x2=x2*x2;
y1=y[a]*100;y2=y[b]*100;
int g;g=gcd(y1,y2);bb=y1*y2/g;
k1=bb/x3;k2=bb/x4;
x1=x1*k1;x2=x2*k2;x3=x3*k1;
y1=y1*k1;y2=y2*k2;x4=x4*k2;
double AA,BB;
AA=100.*(1.*y2-1.*y1);
AA=AA/(x2-x1);
//    cout<<y1<<" "<<AA*x1/100<<" "<<x3<<endl;
BB=(1.*y1-1.*AA*x1/100.)/(1.*x3);
A[a][b]=A[b][a]=AA;
B[a][b]=B[b][a]=BB;
}

void dfs(int has_,int die_)
{
if(flag) return ;
if(has_==0)
{
if(die_==n) flag=true;
return ;
}
for(int i=1;i<=n;i++)
{
if(Kill[i]) continue;
Kill[i]=true;
dfs(has_-1,die_+1);
Kill[i]=false;
}
for(int i=1;i<=n;i++)
{
if(Kill[i]) continue;
for(int j=1;j<=n;j++)
{
if(Kill[j]||x[i]==x[j]) continue;
int js=0;
Kill[i]=Kill[j]=true;
for(int k=1;k<=n;k++)
{
if(Kill[k]) continue;
if(A[i][j]*x[k]*x[k]+B[i][j]*x[k]==y[k])
{
Kill[k]=true;js++;s[k]=true;
}
}
dfs(has_-1,die_+js+2);
for(int k=1;k<=n;k++) if(s[k]) Kill[k]=false;
memset(s,0,sizeof(s));
}
}
}

int main()
{
scanf("%d",&T);
while(T--)
{
flag=false;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
//scanf("%lf%lf",x[i],y[i]);
cin>>x[i]>>y[i];
}
if(n==1)
{
printf("1\n");
continue;
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
slove(i,j);
}
}
//    cout<<A[1][2]<<" "<<B[1][2]<<endl;
for(int i=1;i<=n;i++)
{
memset(Kill,0,sizeof(Kill));
dfs(i,0);
if(flag)
{
printf("%d\n",i);
break;
}
}
}
return 0;
}
/*
1
2 0
1.00 3.00
3.00 3.00
*/
写挂了 明天改

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: