传送门:http://arc082.contest.atcoder.jp/tasks/arc082_c

本题是一个平面几何问题。

在平面直角坐标系中有一个n元点集U={Ai(xi,yi)|1≤i≤n}。考虑以U的子集S中的点为顶点围成的凸多边形P,若这个凸多边形P内(含边界)的点数为k,则这个子集S的权值为f(S)=2k-|S|。求所有子集S的权值之和$\sum_{S\subseteq U}f(S)$(对998,244,353取余)。

定义一个点集上的凸包运算H:GS。即:平面上的一个点集G,有凸包S=H(G)。

设凸多边形P内的点(除顶点外)构成的集合为T,则|T|=k-|S|。于是,f(S)=2|T|,即f(S)为T的子集个数。设T’是T的一个子集,则:由于集合S=H(ST’),即SST’的凸包,故集合ST’对f(S)的贡献为1。

于是,对于U的一个子集G,若凸多边形P的顶点集为H(G),则集合Gans的贡献为1。因此,在不考虑多点共线的前提下,$ans=card\{G|G\subseteq U,G\ge 3\}=2^n -(C_{n}^{2}+n+1)$。

若考虑多点共线的情形,则枚举之。设1≤j<i≤n,记L(i,j)={Ak|Ak on AiAj,1≤k<j<i≤n},则在G≥2的情形下,凸包面积为0的情况数为$\sum_{1\ge j\ge i\ge n}2^{|L(i,j)|}$。

因此,$ans=card\{G|G\subseteq U,G\ge 3\}-\sum_{1\ge j\ge i\ge n}2^{|L(i,j)|}$。

参考程序如下:

#include <stdio.h>
#define MAX_N 201
#define MOD 998244353 int x[MAX_N], y[MAX_N], p[MAX_N]; int main(void)
{
int n;
scanf("%d", &n);
for (int i = ; i < n; i++)
scanf("%d%d", &x[i], &y[i]);
p[] = ;
for (int i = ; i < n; i++)
p[i + ] = (p[i] << ) % MOD;
int ans = p[n] - n - ;
for (int i = ; i < n; i++) {
for (int j = ; j < i; j++) {
int cnt = ;
for (int k = ; k < j; k++) {
if ((x[i] - x[j]) * (y[i] - y[k]) == (x[i] - x[k]) * (y[i] - y[j]))
cnt++;
}
ans -= p[cnt];
ans += MOD;
ans %= MOD;
}
}
printf("%d\n", ans);
return ;
}

AtCoder ARC 082E - ConvexScore的更多相关文章

  1. 【题解】Atcoder ARC#90 F-Number of Digits

    Atcoder刷不动的每日一题... 首先注意到一个事实:随着 \(l, r\) 的增大,\(f(r) - f(l)\) 会越来越小.考虑暴力处理出小数据的情况,我们可以发现对于左端点 \(f(l) ...

  2. AtCoder ARC 076E - Connected?

    传送门:http://arc076.contest.atcoder.jp/tasks/arc076_c 平面上有一个R×C的网格,格点上可能写有数字1~N,每个数字出现两次.现在用一条曲线将一对相同的 ...

  3. AtCoder ARC 076D - Built?

    传送门:http://arc076.contest.atcoder.jp/tasks/arc076_b 本题是一个图论问题——Manhattan距离最小生成树(MST). 在一个平面网格上有n个格点, ...

  4. Atcoder ARC 082C/D

    C - Together 传送门:http://arc082.contest.atcoder.jp/tasks/arc082_a 本题是一个数学问题. 有一个长度为n的自然数列a[1..n],对于每一 ...

  5. 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)

    题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...

  6. 【题解】Atcoder ARC#96 F-Sweet Alchemy

    首先,我们发现每一个节点所选择的次数不好直接算,因为要求一个节点被选择的次数大于等于父亲被选择的次数,且又要小于等于父亲被选择的次数 \(+D\).既然如此,考虑一棵差分的树,规定每一个节点被选择的次 ...

  7. AtCoder ARC 090 E / AtCoder 3883: Avoiding Collision

    题目传送门:ARC090E. 题意简述: 给定一张有 \(N\) 个点 \(M\) 条边的无向图.每条边有相应的边权,边权是正整数. 小 A 要从结点 \(S\) 走到结点 \(T\) ,而小 B 则 ...

  8. 【题解】Atcoder ARC#67 F-Yakiniku Restaurants

    觉得我的解法好简单,好优美啊QAQ 首先想想暴力怎么办.暴力的话,我们就枚举左右端点,然后显然每张购物券都取最大的值.这样的复杂度是 \(O(n ^{2} m)\) 的.但是这样明显能够感觉到我们重复 ...

  9. 【题解】Atcoder ARC#85 E-MUL

    ……没啥可说的.最大权闭合子图,跑下dinic就好了…… #include <bits/stdc++.h> using namespace std; #define maxn 500000 ...

随机推荐

  1. Handle exception in ServiceBase.OnStart method

    https://docs.microsoft.com/en-us/dotnet/api/system.serviceprocess.servicebase.onstart?view=netframew ...

  2. bzoj 1050 [ HAOI 2006 ] 旅行comf —— 并查集

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1050 没思路的话想想暴力就好了... 首先,比值最小就是确定最小值后最大值最小: 怎样确定最 ...

  3. DCloud-MUI:utils

    ylbtech-DCloud-MUI:utils 1.返回顶部 1.init mui框架将很多功能配置都集中在mui.init方法中,要使用某项功能,只需要在mui.init方法中完成对应参数配置即可 ...

  4. bzoj1593 [Usaco2008 Feb]Hotel 旅馆(线段树)

    1593: [Usaco2008 Feb]Hotel 旅馆 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 758  Solved: 419[Submit ...

  5. HTML 14 JS事件

    一 :什么是事件 发生的某一件事:触发特定的条件,完成某一项功能 二:学习的目的 在特定的条件下,完成特定的功能 条件满足的情况下,系统会自动执行 ( 回调 ) 绑定的方法 学习要点: 1.事件的两种 ...

  6. python的搜索路径与包(package)

    python的搜索路径其实是一个列表,它是指导入模块时,python会自动去找搜索这个列表当中的路径,如果路径中存在要导入的模块文件则导入成功,否则导入失败: >>> import ...

  7. .Net Core学习(一)

    1.安装.Net Core https://www.microsoft.com/net/core#windows 2.创建一个.Net Core项目,win+R调出控制台,输入下面命令 mkdir a ...

  8. 利用windbg获取dump的dll文件

    根据堆栈对应的地址查找其对应的Module ID,然后将对应的Module保存. !IP2MD 命令从托管函数中获取 MethodDesc 结构地址. !dumpmodule 1caa50 下面的命令 ...

  9. Spring Boot (3) 热部署devtools

    热部署:当发现程序修改时自动启动应用程序. spring boot为开发者提供了一个名为spring-boot-devtools的模块来使sring boot应用支持热部署,提高开发者的开发效率,无需 ...

  10. 自学Python四 爬虫基础知识储备

    首先,推荐两个关于python爬虫不错的博客:Python爬虫入门教程专栏   和 Python爬虫学习系列教程 .写的都非常不错,我学习到了很多东西!在此,我就我看到的学到的进行总结一下! 爬虫就是 ...