WA#8
已经看过帖子如果你 WA on #8,应该不是这个问题QwQ.
哪位大佬帮我看看
#include<bits/stdc++.h>
#define N 19
using namespace std;
int t, n, m;
double px[N], py[N];
int f[1<<N];
int get(int i, int j) {
double a, b;
if(px[i]==px[j]) return 0;
a=1.0*(py[j]-(py[i]/px[i]*px[j]))/(px[j]*(px[j]-px[i]));
b=1.0*py[i]/px[i]-a*px[i];
if(a>=0) return 0;
//确定抛物线
int t=0;
for(int k=1; k<=n; ++k)
if(abs(1.0*a*px[k]*px[k]+b*px[k]-py[k])<=1e-6)
t|=(1<<(k-1));
//返回能被杀的所有猪的压缩状态
return t;
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> t;
while(t--) {
cin >> n >> m;
for(int i=1; i<=n; ++i)
cin >> px[i] >> py[i];
for(int i=1; i<1<<n; ++i) f[i]=1e9;
for(int i=1; i<1<<n; ++i) {
for(int j=1; j<=n; ++j) {
if(!((i>>(j-1))&1)) continue;
f[i]=min(f[i], f[i^(1<<(j-1))]+1);
//用一条抛物线单杀j号猪
for(int k=j+1; k<=n; ++k) {
if(!((i>>(k-1))&1)) continue;
f[i]=min(f[i], f[i^get(j, k)]+1);
//杀j、k两只猪,同时看看能不能杀别的猪
}
}
}
cout << f[(1<<n)-1] << '\n';
}
return 0;
}