116 条题解
-
0xuji LV 8 @ 2009-04-13 19:13:36
砸地????????????
砸地????????????
砸地????????????
砸地????????????
砸地????????????
var a:array[-100000000..100000000,-100000000..100000000] of byte;
s1,s11,s2,s22,h1,h11,h2,h22,i,j,n,l:longint;
begin
fillchar(a,sizeof(a),0);
readln(n);
for i:=1 to n do
begin readln(s1,h1,s2,h2);
for l:=s1 to s2 do
for n:=h1 to h2 do a[l,n]:=1;
if s1s22 then s22:=s2;
if h1h22 then h22:=h2;
end;
j:=0;
for l:=s11 to s22 do
for n:=h11 to h22 do j:=a[l,n]+j;
writeln(j);
end. -
02009-04-10 23:10:24@
经验:
long long a;
long b,c;
a=b*c;
b*c>long int的话
a也会算错这题简单二维离散化
但是注意数据类型
为此我WA了4次
郁闷
ac率啊编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms#include
#include
using namespace std;
struct mydate{
long date;
long high;
long low;
long id;
};
mydate dx[1005];
long dxn;
long dy[1005];
long dyn;
long n;long long ans;
void init()
{
long i,j;
long x1,y1,x2,y2;
cin >> n;
for(i=1;i> x1 >> y1 >> x2 >> y2;
dx[++dxn].date=x1;
dx[dxn].id=1;
dx[dxn].high=y2;
dx[dxn].low=y1;dx[++dxn].date=x2;
dx[dxn].id=2;
dx[dxn].high=y2;
dx[dxn].low=y1;dy[++dyn]=y1;
dy[++dyn]=y2;}
qsort(1,dxn);
qsort2(1,dyn);
for(i=1;i -
02009-04-06 19:45:00@
把横/纵坐标映射为1到2n的整数...
-
02009-03-27 21:37:49@
终于对了……
以前看黑书上写《火星地图》要用离散化+二维线段树,看着就晕,干脆放弃……
下午考试又考到了,想用离散化,但没用,光考虑另一题,时间耗费光了~~~~
晚上下定决心:一定要把这题做出来!
终于,AC了!!解法:
离散化,将图划成(2n-1)^2个矩形再分别求面积。
结论:离散+long long+iostream=Accepted -
02009-03-24 18:13:35@
离散化+二分查找=AC
Main code:
Begin
readln(n);
for i:=1 to n do
begin
readln(l[2*i-1],r[2*i-1],l,r);
s:=l[2*i-1];
s:=r[2*i-1];
s:=l[2*i];
s:=r[2*i];
end;
qsort(l,1,2*n);
qsort(r,1,2*n);
for i:=2 to 2*n do
for j:=2 to 2*n do
e:=int64(l[i]-l)*int64(r[j]-r[j-1]);
for i:=1 to n do
begin
x1:=find(l,s);
y1:=find(r,s);
x2:=find(l,s);
y2:=find(r,s);
for j:=x1+1 to x2 do
for k:=y1+1 to y2 do
begin
inc(ans,e[j,k]);
e[j,k]:=0;
end;
end;
writeln(ans);
End. -
02009-03-21 14:23:33@
离散第一步!
O(n^3)的模拟吧...
范围真的很重要.
-
02009-02-18 21:54:14@
纯离散化+int64=AC+0ms
以RP担保第四个数据无误 -
02009-02-04 16:13:37@
刚写完USACO的那个3.1 TASK:rect1
用的矩形切割
Accepted 有效得分:100 有效耗时:0ms注意算面积的时候用int64
-
02009-02-02 21:16:02@
不见得
离散化+线段树 AC
只不过 N的上线是200,开100wa了 -
02009-02-01 16:02:05@
MD调试中打印的废话又没删掉 0分
if t=0 then begin s:=s+(rx-lx)*(ry-ly);writeln(s);exit; end;
删掉就A了
关于第四个点的问题很多人错误的原因已经被我发现了
我是用矩形切割做的
function check(lx,ly,rx,ry:int64):boolean;
begin
if (rx>lx)and(ry>ly) then exit(true) else exit(false);
end;
程序中加上这个CHECK函数就A 去掉第四个点错
大家可以看记录
在切割的时候要保证矩形仍然存在! -
02009-01-25 10:55:59@
注意算面积的时候不能直接乘,要用int64中转(我因此WA了3次)。
-
02009-04-06 17:57:42@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02008-11-12 01:24:01@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms第240个 AC
本题的第4个数据有误,矩形切割写不出答案,但离散化可以全对。
另外,我挂了N次,各位要注意:
读入数据不仅要int64读入,而且需要注意的是:int64类型的数组元素不能直接读入。。 -
02008-11-10 20:26:07@
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:50 有效耗时:0ms
第一遍,又是数组,气愤
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
方法是分别将x,y排序,然后产生最小存在矩形,统计求和。数据很小啊......(数据无误ing....)
-
02008-11-04 23:14:55@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms基本思想是离散化
1 对读入的每个矩形的左下方与右上方的横纵坐标分别保存在数组zx,zy,yx,yy中。
for i:=1 to n do
readln(zx[i],zy[i],yx[i],yy[i]);
2 因为zx,zy,yx,yy中的横纵坐标有重复,所以把其中的横纵不重复的放在数组x、y 中。(计算前可先升序排序)。x[0] 表示不重复的横坐标的个数,y[0]表示不重复的纵坐标的个数
3 依次枚举(i,j)的坐标是否在原先矩形的区域内,如果在就将f置为true
(f表示的是一个区域)
for i:=1 to n do
for xt:=1 to x[0]-1 do
for yt:= to y[0]-1 do
if (x[xt]>=zx[i])and(x[xt+1]=zy[i])and(y[yt+1] -
02008-11-01 12:42:43@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms第4点好象没错
-
02008-10-27 08:07:49@
- -~I打成J J 打成I..
然后..过了.- -!!!
世界啊..
- -~I打成J J 打成I..
-
02008-10-22 18:00:22@
md
第四组数据有问题......
害得我Cheat...
坑我们线段树做的不是... -
02008-10-01 10:19:38@
楼上的骗人,不用cheat。我自己发明的矩形切割,全0ms
存坐标的数组应该开到int64,但是如果想省空间可以用int64的中间变量存两个坐标差,再在ans上相加就行了。
原因是乘法运算优先级比赋值运算高,执行ans:=(x2-x1)*(y2-y1)这条语句时先把乘积赋给x1,x2,y1,y2的数据类型再赋值给ans,造成了数据溢出
-
02008-09-18 20:38:43@
朴素的矩形切割即可..注意第4个数据.答案应该是1639..数据有误.需要cheat....