2391: Cirno的忧郁 - BZOJ
Description
Cirno闲着无事的时候喜欢冰冻青蛙。
Cirno每次从雾之湖中固定的n个结点中选出一些点构成一个简单多边形,Cirno运用自己的能力能将此多边形内所有青蛙冰冻。
雾之湖生活着m只青蛙,青蛙有大有小,所以每只青蛙的价值为一个不大于10000的正整数。
Cirno很想知道每次冻住的青蛙的价值总和。因为智商有限,Cirno将这个问题交给完美算术教室里的你。
因为爱护动物,所以每次冻结的青蛙会被放生。也就是说一只青蛙可以被多次统计。
Input
第一行2个正整数 n,m。
以下n行,每行2个整数xi,yi,表示第i个结点的坐标。
再以下m行,每行3个整数xj,yj,vj,表示第j个青蛙的坐标和价值。
第n+m+1行一个整数q,表示有q组询问。
每组询问有2行,第一行一个整数s(3<=s<=n),表示简单多边形的结点数。第二行s个正整数,顺时针或逆时针给出多边形的结点的编号(1--n)
Output
q行。
对于每个询问,每行输出一个整数表示冻结的青蛙的价值之和
Sample Input
4 3
2 2
3 5
7 4
5 1
3 4 2
4 3 7
6 3 90
2
3
1 2 3
4
1 4 3 2
Sample Output
9
99
【
HINT
数据范围】
对于30%的数据,n,m<=100; q<=100
对于60%的数据,n,m<=100; q<=10000
对于100%的数据,n,m<=1000; q<=10000
-10000<=x,y<=10000; 0<v<=10000
看见他三次了,还是写了吧
我们预处理出s[i,j]表示线段[i,j)下面的点权和
然后就可以像求多边形面积一样求权值和了
预处理这个很简单,枚举一个端点,然后极角排序,按顺序加点,用树状数组维护和加到点j的时候s[i,j]=sum(xi,xj-1),因为两个端点不能同时取要不然就多了,感觉有点像cdq分治
const
maxn=;
type
point=record
x,y,id,v:longint;
end;
aa=array[..maxn*]of longint;
var
a,b:array[..maxn*]of point;
s:array[..maxn,..maxn]of longint;
x,c:aa;
n,m,q:longint; procedure swap(var x,y:longint);
var
t:longint;
begin
t:=x;x:=y;y:=t;
end; procedure sort(l,r:longint;var a:aa);
var
i,j,y:longint;
begin
i:=l;j:=r;y:=a[(l+r)>>];
repeat
while a[i]<y do inc(i);
while a[j]>y do dec(j);
if i<=j then
begin
swap(a[i],a[j]);
inc(i);dec(j);
end;
until i>j;
if i<r then sort(i,r,a);
if j>l then sort(l,j,a);
end; operator -(a,b:point)c:point;
begin
c.x:=a.x-b.x;
c.y:=a.y-b.y;
end; operator *(a,b:point)c:longint;
begin
exit(a.x*b.y-a.y*b.x);
end; procedure swap(var x,y:point);
var
t:point;
begin
t:=x;x:=y;y:=t;
end; procedure sort(l,r:longint);
var
i,j:longint;
y:point;
begin
i:=l;j:=r;y:=a[(l+r)>>];
repeat
while (y-a[])*(a[i]-a[])< do inc(i);
while (y-a[])*(a[j]-a[])> do dec(j);
if i<=j then
begin
swap(a[i],a[j]);
inc(i);dec(j);
end;
until i>j;
if i<r then sort(i,r);
if j>l then sort(l,j);
end; function find(k:longint):longint;
var
l,r,mid:longint;
begin
l:=;r:=n+m;
while l<>r do
begin
mid:=(l+r)>>;
if x[mid]<k then l:=mid+
else r:=mid;
end;
exit(l);
end; procedure add(x,y:longint);
begin
while x<=n+m do
begin
inc(c[x],y);
x:=x+(x and (-x));
end;
end; function sum(x:longint):longint;
begin
sum:=;
while x> do
begin
inc(sum,c[x]);
x:=x-(x and (-x));
end;
end; procedure main;
var
i,j,cnt,ans:longint;
begin
read(n,m);
for i:= to n do
begin
read(a[i].x,a[i].y);
b[i]:=a[i];
a[i].id:=i;
end;
for i:=n+ to n+m do
read(a[i].x,a[i].y,a[i].v);
for i:= to n+m do
x[i]:=a[i].x;
sort(,n+m,x);
for i:= to n do
begin
for j:= to n+m do
c[j]:=;
a[]:=b[i];
cnt:=;
for j:= to n+m do
if (a[j].x>=a[].x) and ((a[j].x<>a[].x) or (a[j].y<>a[].y)) then
begin
inc(cnt);
swap(a[j],a[cnt]);
end;
sort(,cnt);
for j:= to cnt do
begin
if a[j].id> then s[i,a[j].id]:=sum(find(a[j].x)-)
else add(find(a[j].x),a[j].v);
end;
end;
for i:= to n do
for j:= to n do
if s[i,j]= then s[i,j]:=-s[j,i];
read(q);
for i:= to q do
begin
read(cnt);
for j:= to cnt do
read(x[j]);
ans:=;
for j:= to cnt do
inc(ans,s[x[j],x[j mod cnt+]]);
writeln(abs(ans));
end;
end; begin
main;
end.
2391: Cirno的忧郁 - BZOJ的更多相关文章
- [BZOJ2391]Cirno的忧郁
[BZOJ2391]Cirno的忧郁 试题描述 Cirno闲着无事的时候喜欢冰冻青蛙. Cirno每次从雾之湖中固定的n个结点中选出一些点构成一个简单多边形,Cirno运用自己的能力能将此多边形内所有 ...
- 「BZOJ2391」Cirno的忧郁
传送门 设p[0] = (-10001,-10001) 把所有点按p[0]极角排序, s[i][j]表示三角形p[0]p[i]p[j]内的总价值,若i到j极角增大则s为正,否则s为负. 那么答案就是按 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Bzoj 2393: Cirno的完美算数教室 容斥原理,深搜
2393: Cirno的完美算数教室 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 287 Solved: 175[Submit][Status][ ...
- BZOJ 2393 Cirno的完美算数教室
就是爆搜嘛. 先从大到小排个序能减去dfs树上很大的一部分.这个技巧要掌握. #include<iostream> #include<cstdio> #include<c ...
- bzoj 2393 Cirno的完美算数教室(容斥原理+搜索)
[题意] 定义C数为只包含数字2和9的数,求[L,R]内能被C数整除的个数. [思路] Dfs预处理出C数,并去除其中倍数的情况. Dfs搜索出现情况,奇数加,偶数减,当数值大于R时剪枝. [代码] ...
- ●BZOJ 2393 Cirno的完美算数教室
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2393 题解: 容斥原理,暴力搜索,剪枝...和 [Scoi2010 幸运数字] 一样的(只是 ...
- bzoj 1853: [Scoi2010]幸运数字&&2393: Cirno的完美算数教室【容斥原理】
翻了一些blog,只有我用状压预处理嘛2333,.把二进制位的0当成6,1当成8就行啦.(2393是2和9 然后\( dfs \)容斥,加上一个数的\( lcm \),减去两个数的\( lcm \), ...
- [bzoj 2393] Cirno的完美算数教室 (容斥原理+dfs剪枝)
题目描述 CirnoCirnoCirno发现了一种bakabakabaka数,这种数呢只含有222和999两种数字 现在CirnoCirnoCirno想知道[L,R][L,R][L,R]中有多少个数能 ...
随机推荐
- 五、PackageManager获取版本号
PackageInfo代表的是关于一个包的所有信息,就相当于一个APP应用的清单文件中收集到的所有信息. 通过这个类我们就可以获取类似版本号等一些信息. 1 2 3 4 5 6 7 8 9 10 11 ...
- JavaScript之放大镜效果
在网上也浏览过许多关于JavaScript放大镜效果的文章,有的代码解释得些隐晦难懂,看的我头有点晕晕的╮(╯﹏╰)╭,我的心情是这样的: 吐槽完了,我们动动小鼠标,当鼠标经过下面这张美女图片时就实现 ...
- iOS 常用控件集合 完整项目
[Swift]高仿 爱范儿3.0 http://www.code4app.com/forum.php?mod=viewthread&tid=10053&page=1&extra ...
- error at ::0 can't find referenced pointcut performance
严重: Caught exception while allowing TestExecutionListener [org.springframework.test.context.support. ...
- SVN常见问题处理
1.SVN 提交时报错:Path is not a working copy directory (1)报这个错通常是因为这个文件夹或其上层文件夹不是checkout或update出来的. 使用S ...
- 不用Unity库,自己实现.NET轻量级依赖注入
在面向对象的设计中,依赖注入(IoC)作为一种重要的设计模式,主要用于削减计算机程序的耦合问题,相对于Java中的Spring框架来说,微软企业库中的Unity框架是目前.NET平台中运用比较广泛的依 ...
- nginx配置多个网址
实战Nginx与PHP(FastCGI)的安装.配置与优化:http://ixdba.blog.51cto.com/2895551/806622 Nginx配置文件详细说明:http://www.cn ...
- zedboard VmodCAM 图像采集 HDMI输出显示
本文叙述zedboard VmodCAM 图像采集 HDMI输出显示 参考: 1.color space详解资料 http://download.csdn.net/detail/xiabodan/ ...
- lnmp下配置虚拟主机
一:首先熟悉几个命令 which php ---> which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件 whereis php ----& ...
- isNotNull与isNotEmpty的区别
<isNotNull> 检查属性是否不为null <isNotEmpty> 检查Collection.size()的值,属性的String或String.valueOf()值, ...