bzoj 4814: [Cqoi2017]小Q的草稿【计算几何】

//先打个50暴力,10min50分简直美滋滋~
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=5005;
const double eps=1e-8;
int n,t,m,ans;
struct dian
{
    double x,y;
    dian(double X=0,double Y=0)
    {
        x=X,y=Y;
    }
    dian operator + (const dian &a) const
    {
        return dian(x+a.x,y+a.y);
    }
    dian operator - (const dian &a) const
    {
        return dian(x-a.x,y-a.y);
    }
}a,b,c,p[N];
struct bian
{
    dian s,t;
    bian(dian S=dian(),dian T=dian())
    {
        s=S,t=T;
    }
}l[N];
int read()
{
    int r=0,f=1;
    char p=getchar();
    while(p>‘9‘||p<‘0‘)
    {
        if(p==‘-‘)
            f=-1;
        p=getchar();
    }
    while(p>=‘0‘&&p<=‘9‘)
    {
        r=r*10+p-48;
        p=getchar();
    }
    return r*f;
}
int sgn(double x)
{
    return x<-eps?-1:x>eps;
}
double cj(dian a,dian b)
{
    return a.x*b.y-a.y*b.x;
}
bool lc(dian a,dian b,dian c,dian d)
{
    return sgn(cj(c-a,b-a)*cj(b-a,d-a))>=0;
}
bool jiao(dian a,dian b,dian c,dian d)
{
    return lc(a,b,c,d)&&lc(c,d,a,b);
}
bool ok(dian a,dian b)
{
    for(int i=1;i<=m;i++)
        if(jiao(a,b,l[i].s,l[i].t))
            return 0;
    return 1;
}
int main()
{
    n=read(),t=read();
    for(int i=1;i<=n;i++)
        p[i].x=read(),p[i].y=read();
    for(int i=1;i<=t;i++)
    {
        a.x=read(),a.y=read(),b.x=read(),b.y=read(),c.x=read(),c.y=read();
        l[++m]=bian(a,b),l[++m]=bian(b,c),l[++m]=bian(c,a);
    }
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++)
            if(ok(p[i],p[j]))
                ans++;
    printf("%d\n",ans);
    return 0;
}

原文地址:https://www.cnblogs.com/lokiii/p/8511628.html

时间: 2024-10-08 06:27:34

bzoj 4814: [Cqoi2017]小Q的草稿【计算几何】的相关文章

bzoj4814: [Cqoi2017]小Q的草稿

Description 小Q是个程序员.众所周知,程序员在写程序的时候经常需要草稿纸.小Q现在需要一张草稿纸用来画图,但是桌上 只有一张草稿纸,而且是一张被用过很多次的草稿纸.草稿纸可以看作一个二维平面,小Q甚至已经给它建立了直 角坐标系.以前每一次草稿使用过的区域,都可以近似的看作一个平面上的一个三角形,这个三角形区域的内部和 边界都不能再使用.当然了,以前的草稿也没有出现区域重叠的情况.小Q已经在草稿纸上画上了一些关键点,这 些关键点都在没使用过的区域.小Q想把这些关键点两两之间尽可能的用线

BZOJ 4815: [Cqoi2017]小Q的表格

Description \(b×f(a,a+b)=(a+b)*f(a,b)\),支持修改 求\(\sum_{i=1}^k\sum_{j=1}^kf(i,j)\) \(m\leqslant 10^4,k\leqslant n\leqslant 4\times 10^6\) Solution 数论+分块 可以发现这是一个类似于更相减损的东西...就是修改一个位置,只会影响与他横纵坐标相同的位置...所以它其实是一个一维的东西...所以就是求\(\sum_{i=1}^k\sum_{j=1}^k\fra

【bzoj4813】[Cqoi2017]小Q的棋盘 dfs+贪心

题目描述 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上共有V个格点,编号为0,1,2-,V-1,它们是连通的,也就是说棋子从任意格点出发,总能到达所有的格点.小Q在设计棋盘时,还保证棋子从一个格点移动到另外任一格点的路径是唯一的.小Q现在想知道,当棋子从格点0出发,移动N步最多能经过多少格点.格点可以重复经过多次,但不重复计数. 输入 第一行包含2个正整数V,N,其中V表示格点总数,N表示移动步数. 接下

[bzoj4815] [洛谷P3700] [Cqoi2017] 小Q的表格

Description 小Q是个程序员. 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理. 每当小Q不知道如何解决时,就只好向你求助.为了完成任务,小Q需要列一个表格,表格 有无穷多行,无穷多列,行和列都从1开始标号.为了完成任务,表格里面每个格子都填了 一个整数,为了方便描述,小Q把第a行第b列的整数记为f(a,b),为了完成任务,这个表格要 满足一些条件: (1)对任意的正整数a,b,都要满足f(a,b)=f(b,a): (2)对任意的正整数a,b,都要 满

【BZOJ】 4813: [Cqoi2017]小Q的棋盘

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4813 暴力转移就好,考虑以某一个点为根的子树分为是否走回来两种情况 ${f_{i,j}}$表示已点$i$为根的子树,走了$j$步之后回到点$i$最多能经过多少个点 ${g_{i,j}}$表示已点$i$为根的子树,走了$j$步之后不管停在那个点最多能经过多少个点 写了个${n^{2}}$转移 1 #include<iostream> 2 #include<algorithm>

BZOJ [Cqoi2017] 小Q的棋盘

题解:枚举最后在哪里停止,然后剩下的步数/2 也就是找最大深度 枚举终止位置算是一种思路吧 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=10009; int n,m; int maxdep; int cntedge; int head[maxn]; int to[maxn<<1],nex[maxn<<1]; vo

bzoj4815 [Cqoi2017]小Q的表格

传送门 这题好妙啊,我好菜啊--居然连辗转相减都看不出来,我是不是没救了-- -- 考虑题目给出的两个条件: $f_{a,b}=f_{b,a}$,这个就是对称性. $b×f_{a,a+b}=(a+b)×f_{a,b}$,这个有点意思.整道题明明就是这里最难好嘛 先不管两个$f_{a,b}$之间到底有什么数量关系,只考虑哪些$f_{a,b}$互相影响,记$a~b$表示$a$与$b$相关,可以把它变形一下得到$f_{a,b}~f_{a,b-a}(a\le b)$,结合$f_{a,b}=f_{a,b}

[CQOI2017]小Q的棋盘

https://zybuluo.com/ysner/note/1218474 题面 一棵有\(n\)个结点的树,问从\(1\)(根)结点出发,走\(m\)步最多能经过多少结点. \(n\leq100\) 解析 数据范围亮了 显然,在根结点周围转一圈再回来,走最长链到底是最值的. 于是先求出最长链\(L\). 如果\(L>m\),\(ans=m+1\); 否则剩下\(n-(L-1)\)步,能多走\(\frac{n-L+1}{2}\)个点.(画画图发现找不出什么特殊情况) 即\[ans=min(n,

[CQOI2017]小Q的表格——反演好题

zhoutb2333的题解 难得一见的新颖反演题. 一眼看可能不是反演题. 修改影响别的,很恶心. 所以考虑化简f的联系式,发现和gcd有关 于是考虑用gcd来表示所有的gcd(a,b)=g的所有f(a,b)于是二维利用结合律变成了一维的问题. 修改(a,b)本质上是修改f(g,g),因为其他的数用f(g,g)表示,都在式子里. 支持单点修改,带入k询问这个函数的值. 已经可以O(根号)查一次. 对于式子反演, 单点修改,要支持区间和(前缀和)维护. 树状数组轻而易举,但是查询有logn 然后m