求助 只有前两个是AC

P1047 [NOIP2005 普及组] 校门外的树

zhouyf828 @ 2023-08-29 20:30:26

a=input()+' '
for i in range(len(a)):
    if a[i]==" ":
        cd=int(a[0:i])   #cd马路长度
        qy=int(a[i+1:-1])  #区域数目
        break
q2=[[0 for i in range(2)] for j in range(qy)]  #q2储存起始点终止点
for j in range(qy):
    b=input()+' '
    for k in range(len(b)):
        if b[k]==" ":
            qd=int(b[0:k])
            zd=int(b[k+1:-1])
            q2[j][0]=qd
            q2[j][1]=zd
            break
for i in range(1,len(q2)): #感觉是这后面出了问题
    for j in range(i,len(q2)):
        if q2[j][1]>=q2[i-1][0] and q2[j][0]<q2[i-1][0]:
            q2[i-1][0]=q2[j][0]
            q2[j][1],q2[j][0]=-1,-1
        elif q2[j][0]<=q2[i-1][1] and q2[j][1]>q2[i-1][1]:
            q2[i-1][1]=q2[j][1]
            q2[j][1],q2[j][0]=-1,-1
for i in range(len(q2)):
    if q2[i][0]!=-1:
        cd-=q2[i][1]-q2[i][0]+1
cd+=1
print(cd)

希望有大佬帮忙看看


by liu_le_chen @ 2023-08-29 20:53:14

我们也看不懂呢@zhouyf828


by zhouyf828 @ 2023-08-29 20:53:29

@liulechen 课还没排出来不知道老师是谁


by ybchenyuyang @ 2023-08-29 20:53:46

@zhouyf828 好叭,外行不懂。

话说回来你用二维干什么??一维标记就行了呀


by zhouyf828 @ 2023-08-29 20:54:10

@liulechen 我改了一下加了包含的情况,结果第三个也过了,除了前三个一个都没过


by zhouyf828 @ 2023-08-29 20:55:55

@cyyyyds857 我原来没想用标记(标记方法我已经全部通过了),我想用合并的方法(专业名词我也不懂),就是把重复车站区间全部合并,最后尾-头算车站区间长度


by ybchenyuyang @ 2023-08-29 20:57:45

@zhouyf828 我虽然不懂py,先发个伪代码

read l
read m
foreach from 0 to m-1 :
    read u
    read v
    foreach from u to v:
        sum[j]=1
    foreach from 0 to l
        a=a+sum[]

懒得打了正经的伪代码,看得懂就行了


by liu_le_chen @ 2023-08-29 20:58:47

你不都过了吗?


by liu_le_chen @ 2023-08-29 21:00:32

能简单点过为什么要搞复杂呢?@zhouyf828 (不懂不懂


by zhouyf828 @ 2023-08-29 22:16:05

@cyyyyds857 我就是按这种方法过了,谢谢了


上一页 |