社区讨论

求助

P2831[NOIP 2016 提高组] 愤怒的小鸟参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mjcvw470
此快照首次捕获于
2025/12/19 21:07
3 个月前
此快照最后确认于
2025/12/19 21:31
3 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define ld long double
using namespace std;

namespace yixing{
	const int INF=19;
	const ld EPS=1e-9;
	int n,m;
	ld x[INF],y[INF];
	int line[500],cnt,dp[1<<INF];
	inline bool check(int u,ld a,ld b){
		ld y1=x[u]*x[u]*a+b*x[u];
		if (y[u]-EPS<=y1&&y1<=y[u]+EPS)return 1;
		return 0;
	}
	inline void calc(int u,int v){
		int tot=0;
		ld x1=x[u],x2=x[v],y1=y[u],y2=y[v];
		ld a=(x1*y2-x2*y1)/(x1*x2*(x2-x1));
		ld b=(x1*x1*y2-x2*x2*y1)/(x1*x2*(x1-x2));
		if (a>=0)return;
		tot+=((1<<(u-1))+(1<<(v-1)));
		for (int i=v+1;i<=n;i++)if (check(i,a,b))tot+=(1<<(i-1));
		line[++cnt]=tot;
	}
	inline void init(){
		memset(line,0,sizeof(line));
		memset(dp,0x3f,sizeof(dp));
		cnt=0;
	}
	inline void Main(){
		cin>>n>>m;
		init();
		for (int i=1;i<=n;i++)cin>>x[i]>>y[i],line[++cnt]=(1<<(i-1));
		for (int i=1;i<=n;i++)for (int j=i+1;j<=n;j++)calc(i,j);
		for (int i=1;i<=cnt;i++)dp[line[i]]=1;
		for (int x=1;x<=(1<<n)-1;x++)for (int j=1;j<=cnt;j++)dp[x|line[j]]=min(dp[x|line[j]],dp[x]+1);
		cout<<dp[(1<<n)-1]<<"\n";
	}
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	int T;cin>>T;
	while (T--)yixing::Main();
	return 0;
}
WA on 10 详细信息如下
wrong answer On line 2 column 1, read 4, expected 5.

回复

0 条回复,欢迎继续交流。

正在加载回复...