| 比赛 |
csp2025模拟练习2 |
评测结果 |
RRMRRMRRMRMRMMRMMMMM |
| 题目名称 |
愤怒的小鸟 |
最终得分 |
0 |
| 用户昵称 |
李奇文 |
运行时间 |
2.805 s |
| 代码语言 |
C++ |
内存使用 |
1.95 MiB |
| 提交时间 |
2025-10-29 11:55:56 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const double E=1e-8;
struct P{ double x,y; };
int n,m,ans;
vector<P> p;
vector<vector<int>>l;
bool s(double x,double y){
return fabs(x-y)<E;
}
bool o(int i,int j,int k){
double x1=p[i].x,y1=p[i].y,x2=p[j].x,y2=p[j].y,x3=p[k].x,y3=p[k].y;
if(s(x1,x2)) return 0;
double A=(x2*y1-x1*y2)/(x1*x1*x2-x2*x2*x1);
double B=(x1*x1*y2-x2*x2*y1)/(x1*x1*x2-x2*x2*x1);
if(A>=0) return 0;
return s(A*x3*x3+B*x3,y3);
}
void dfs(int i,int u,int c){
if(u>=ans) return;
if(c==(1<<n)-1){
ans=min(ans,u);
return;
}
if(i==l.size()) return;
if((c|l[i])!=c) dfs(i+1,u+1,c|l[i]);
dfs(i+1,u,c);
}
int main(){
freopen("angrybirds.in","r",stdin);
freopen("angrybirds.out","w",stdout);
int T;
cin>>T;
while(T--){
cin>>n>>m;
p.resize(n);
for(int i=0;i<n;i++) cin>>p[i].x>>p[i].y;
l.clear();
for(int i=0;i<n;i++){
vector<int>t={i};
l.push_back(t);
for(int j=i+1;j<n;j++){
if(s(p[i].x,p[j].x)) continue;
double x1=p[i].x,y1=p[i].y,x2=p[j].x,y2=p[j].y;
double A=(x2*y1-x1*y2)/(x1*x1*x2-x2*x2*x1);
double B=(x1*x1*y2-x2*x2*y1)/(x1*x1*x2-x2*x2*x1);
if(A>=0) continue;
vector<int>t2={i,j};
for(int k=0;k<n;k++){
if(k==i||k==j) continue;
if(o(i,j,k)) t2.push_back(k);
}
l.push_back(t2);
}
}
sort(l.begin(),l.end(),[](auto x,auto y){return x.size()>y.size();});
ans=n;
dfs(0,0,0);
cout<<ans<<endl;
}
return 0;
}