博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
arc082E ConvexScore
阅读量:7120 次
发布时间:2019-06-28

本文共 1710 字,大约阅读时间需要 5 分钟。

题目链接

题意简述

平面上有nnn个点,对于每一个顶点都是这nnn个点的凸多边形,都会对答案产生2x2^x2x的贡献,其中xxx为凸多边形内部点的个数,包括在边上的点,但是不包括顶点。求答案模998244353998244353998244353

题解

观察贡献的特点,可以发现每个凸多边形对答案的贡献就是凸包为这个凸多边形的点集个数,那么答案就是能构成凸包的点集个数,也就是所有点集−-共线点集个数。统计共线点集可以O(n3)O(n^3)O(n3)也可以O(n2log⁡n)O(n^2\log n)O(n2logn)。下面代码用O(n3)O(n^3)O(n3)的方法。(我才不告诉你我不会O(n2log⁡n)O(n^2\log n)O(n2logn)呢QwQ

代码

#include 
int read(){
int x=0,f=1; char ch=getchar(); while((ch<'0')||(ch>'9')) {
if(ch=='-') {
f=-f; } ch=getchar(); } while((ch>='0')&&(ch<='9')) {
x=x*10+ch-'0'; ch=getchar(); } return x*f;}const int maxn=200;const int mod=998244353;struct point{
int x,y;};point p[maxn+10];int n,ans;int quickpow(int a,int b,int m){
int res=1; while(b) {
if(b&1) {
res=1ll*res*a%m; } a=1ll*a*a%m; b>>=1; } return res;}int in_line(point a,point b,point c){
return (b.y-a.y)*(c.x-a.x)==(c.y-a.y)*(b.x-a.x);}int main(){
n=read(); for(int i=1; i<=n; ++i) {
p[i].x=read(); p[i].y=read(); } for(int i=1; i<=n; ++i) {
for(int j=i+1; j<=n; ++j) {
int cnt=0; for(int k=j+1; k<=n; ++k) {
if(in_line(p[i],p[j],p[k])) {
++cnt; } } ans+=quickpow(2,cnt,mod); if(ans>=mod) {
ans-=mod; } } } ans+=n+1; if(ans>=mod) {
ans-=mod; } ans=quickpow(2,n,mod)-ans; if(ans<0) {
ans+=mod; } printf("%d\n",ans); return 0;}

转载于:https://www.cnblogs.com/Canopus-wym/p/10376102.html

你可能感兴趣的文章
JOptionPane
查看>>
map按照value排序的方法
查看>>
[MAC OS] 解压Assets.car获取资源图片
查看>>
操作系统IO模型
查看>>
mvc4 中的 AuthorizeAttribute
查看>>
oracle 建实例异常:进度停留在2%、内存占用不断增大。环境:winserver2008 r2、8核16线程...
查看>>
C++ 的对象模型
查看>>
[下载地址] Maven - 插件(附详细配置_阿里版)
查看>>
web.xml配置详解之listener与context-param
查看>>
Spring的bean管理--注解和配置文件混合使用
查看>>
-save-dev 与 -save的区别
查看>>
TypeError: $(…).tooltip is not a function
查看>>
php count()函数用法 及其 一个坑
查看>>
Qt可扩展窗口实现
查看>>
JS自学笔记04
查看>>
MySQL基础
查看>>
写操作系统学到
查看>>
真正统治世界的十大算法
查看>>
FZU-2236 第十四个目标(树状数组)
查看>>
hibernate多表关联(<hibernate-mapping>)的配置
查看>>