[考试反思]1004csp-s模拟测试59:惊醒

[考试反思]1004csp-s模拟测试59:惊醒

一句话:我看错考试时间了,我以为11:30结束,T2T3暴力没来得及交。

为什么考试的时间忽然变了啊。。。没转过来

一定要看清考试的起止时间!

虽说T2T3连爆搜都没打,只打特殊性质只有32分。爆搜分还挺高的。

当特殊性质不好扩展时,记得把爆搜打上。

本来是想T1先送上暴力,然后尝试肝T2,然后是T3暴力,有时间再回来优化T1。

但是整场考试时间是崩的,也没回T1。。。然而T2T3

注意分数与时间的权衡。

 

T1:Reverse

BFS。

二营长打法极其简单。因为是BFS所以一个点不会被多次更新。

那么一次更新了一个区间内的全部奇数或偶数,下次遇到的时候直接跳过就行了。

用链表实现,代码特别特别特别简单。常数也特别小,复杂度O(n),相较于线段树优化建边还少个log。

 1 #include<iostream>
 2 using namespace std;
 3 int dt[100005],q[100005],R[100005],n,m,k,S,x;
 4 int main(){
 5     cin>>n>>k>>m>>S;
 6     for(int i=1;i<=n;++i)dt[i]=n+1,R[i]=i+2;
 7     while(m--)cin>>x,dt[x]=-1;
 8     dt[S]=0;q[1]=S;
 9     for(int h=1,t=1;h<=t;++h){
10         int st=max(1,q[h]-k+1),l=st+st+k-1-q[h];st=min(n-k+1,q[h]);int r=st+st+k-1-q[h];
11         for(int i=l;i<=r;i=R[i])if(dt[i]>dt[q[h]]+1)dt[i]=dt[q[h]]+1,q[++t]=i;
12         for(int i=l;i<=r;){int rr=R[i];R[i]=max(R[i],r);i=rr;}
13     }
14     for(int i=1;i<=n;++i)cout<<(dt[i]>n?-1:dt[i])<<" ";cout<<endl;
15 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案