88 条题解
-
0djasmine LV 7 @ 2009-10-24 20:23:18
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms茶几+spfa
-
02009-10-24 15:51:44@
dp+叉积
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02009-10-24 15:12:35@
Accepted 有效得分:100 有效耗时:72ms
这题暴力解,一次A!
将每个坐标值*100再取整,因为是要精确2位嘛.虽然时间慢点,72ms...囧...
readln(n);
for i:=1 to n do readln(l[i],a[1,i],b[1,i],a[2,i],b[2,i]);
inc(n);
a[1,0]:=5; b[1,0]:=5; a[2,0]:=5; b[2,0]:=5; l[0]:=0;
a[1,n]:=5; b[1,n]:=5; a[2,n]:=5; b[2,n]:=5; l[n]:=10;
for i:=0 to n do l[i]:=l[i]*100;
//---|---|---|---|---|---|---|---|---|---|---|---|
for i:=n-1 downto 0 do begin
g:=f; fillchar(f,sizeof(f),$7f);
for d1:=1 to 2 do
for j:=trunc(a[d1,i]*100) to trunc(b[d1,i]*100) do
for d2:=1 to 2 do
for k:=trunc(a[d2,i+1]*100) to trunc(b[d2,i+1]*100) do
f[j]:=min(f[j],g[k]+dis(l[i],j,l,k));
end; -
02009-10-04 17:58:01@
我无语了
-
02009-10-02 11:54:33@
。。。居然一次就过了。。建了一个囧图然后SPFA。。
-
02009-09-23 20:11:35@
囧死掉,细节啊,交了6次才过……
其中有2次是因为忘保留两位小数,有3次是因为忘关文件操作……
本题AC率被我活生生刷下1%……跨立试验 + SPFA
-
02009-09-15 20:53:15@
Dijkstra+判断直线相交,一次AC。。。
-
02009-08-28 21:01:51@
DP
设f(i)为标号i的节点到初始节点的长度
f(i)=min(f(j)+dis(i,j)(i,j可达))
程序大概40~50行左右,我写的比较冗长47行
program P1013;
var
x:array[-1..20]of real;
a,f:array[-1..80]of real;
n,i,j:longint;
ans,dis:real;
s:boolean;
function min(b,c:real):real;
begin
if b=0
then lb:=b shr 2
else lb:=-1;
lc:=c shr 2;pd:=true;
k:=(a-a[c])/(x[lb]-x[lc]);
for l:=lb+1 to lc-1 do
begin
d:=a+k*(x[l]-x[lb]);
if (da[4*l+3])
then begin
pd:=false;
break;
end;
end;
dis:=sqrt(sqr(a-a[c])+sqr(x[lb]-x[lc]));
end;
begin
readln(n);
x[-1]:=0;a[-1]:=5;x[n]:=10;a[4*n]:=5;
for i:=0 to n-1 do
readln(x[i],a,a,a,a);
for i:=0 to 4*n do
f[i]:=1e10;
for i:=0 to 4*n do
for j:=-1 to 4*(i shr 2)-1 do
if pd(j,i)
then f[i]:=min(f[i],dis+f[j]);
end.
程序千万不要直接考哦!少了一个语句 -
02009-08-28 20:33:10@
WS的打了90+行....结果1次ms..
-
02009-08-18 23:23:43@
第一个一遍AC的 o(∩_∩)o...
简单模拟 加一个判断函数即可 -
02009-08-18 15:34:17@
相似三角+DP为什么第四个点比正确答案少0.05...
-
02009-08-07 15:01:25@
细节问题
-
02009-07-31 13:09:46@
-
02009-07-30 21:48:18@
shit 一个变量打错了
-
02009-07-25 09:55:40@
简单的DP,如果能够从(x1,y1)不穿墙直接到达(x2,y2)(x2>x1),那么
dis[x1,y1]=min{dis[x1,y1],dis[x2,y2]+len},其中len是(x1,y1)到(x2,y2)的距离
可惜我看错了题目,以为n -
02009-07-17 18:57:45@
叉积即可
-
02009-07-10 18:43:35@
终于AC!!!
就是有点麻烦而已。 -
02009-06-09 00:14:21@
一次搞定:D 89行……
起点编到一半才想起来 于是加了个数列第-1项 但 -1div4=1div4=0所以起点和其他点的联通情况最好单独判断。附判断函数:
var
cost:array[-1..80,-1..80]of real;
x,y:array[-1..80]of real;
function bool(a,b:integer):boolean;
var
i,j:integer;
begin
for i:=(a div 4)+1 to (b div 4)-1 do
begin
if (y-y[a])/(x-x[a])>(y-y[a])/(x-x[a]) then exit(false);
if ( (y-y[a])/(x-x[a])(y-y[a])/(x-x[a]) ) then exit(false);
if (y-y[a])/(x-x[a])(y-y[a])/(x-x[a]) then exit(false);
if ( (y-y[a])/(x-x[a])(y-y[a])/(x-x[a]) ) then exit(false);
if (y-y[a])/(x-x[a]) -
02009-05-13 21:06:23@
type
dot=record
x,y:double;
end;
line=record
a,b:dot;
end;var
n,p,cl,op:longint;
d:array[0..100]of dot;
l:array[0..70]of line;
fir:array[0..100]of longint;
dist:array[0..100]of double;
used:array[0..100]of boolean;
w:array[0..100*100]of double;
u,last,q:array[0..100*100]of longint;function cj(a,b,c:dot):double;
begin
cj:=(b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);
end;function can(a,b:dot):boolean;
var
i:longint;
begin
for i:=1 to ((n-2)div 4)*3 do
if (cj(a,b,l[i].a)*cj(a,b,l[i].b) -
02009-04-13 20:01:53@
额。。不是很难,但是要细心一点。
我自己中的招:没有判断能否从起点直接到达。