把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

AT3526 [ARC082C] ConvexScore

题面传送门
吐槽一下为什么求一次函数解析式然后暴力带入会WA,然后求斜率比较就对了啊。
首先那个式子不是很好处理,我们来考虑这个式子的组合意义。
容易想到这个就是非边界上的点选与不选,即选点集能构成凸包的方案数。
然后这个容斥一下,枚举共线点即可。
时间复杂度O(n3)
code:

#include <vector>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<algorithm>
#include<bitset>
#include<set>
#include<map>
#define I inline
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define abs(x) ((x)>0?(x):-(x))
#define l(x) x<<1
#define r(x) x<<1|1
#define re register
#define ll long long
#define db double
#define N 300
#define eps (1e-5)
#define mod 998244353
#define U unsigned
using namespace std;
int n,pus;ll ans,po[N+5];
struct point{double x,y;}F[N+5];
I db slope(int a,int b){return F[a].x==F[b].x?1e9:(F[b].y-F[a].y)/(F[b].x-F[a].x);}
I bool cmp(point x,point y){return x.x<y.x;}
int main(){
	freopen("1.in","r",stdin);
	int i,j,h;scanf("%d",&n);po[0]=1;for(i=1;i<=n;i++) scanf("%lf%lf",&F[i].x,&F[i].y),po[i]=po[i-1]*2%mod;ans=po[n]-n-1;sort(F+1,F+n+1,cmp);
	for(i=1;i<=n;i++){
		for(j=i+1;j<=n;j++){
			for(pus=0,h=i+1;h<j;h++) pus+=(slope(i,h)==slope(j,h));ans-=po[pus];
 		}
	}
	printf("%lld\n",(ans%mod+mod)%mod);
}
posted @   275307894a  阅读(39)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
浏览器标题切换
浏览器标题切换end
点击右上角即可分享
微信分享提示