萌新刚学 oi 全 WA 求调 qwq

P1076 [NOIP2012 普及组] 寻宝

@[无钩七不改名](/user/511609) 倍增的话如果`nxt[j][0]=j`时,他不会一直自己跳自己吗。
by __zaa__ @ 2024-04-12 07:48:22


```cpp #include<bits/stdc++.h> using namespace std; const int N=10005,M=105,X=25,mod=20123; int n,m,num[N][M]; bool lt[N][M]; int nx[M][X],ans; int read(){ int f=1,k=0; char c=getchar(); while(c<'0'||c>'9'){ if(c=='-')f=-1; c=getchar(); } while(c>='0'&&c<='9'){ k=k*10+c-'0'; c=getchar(); } return f*k; } int main(){ //cout<<log2(1000000);//19.... n=read();m=read(); for(int i(1);i<=n;++i) for(int j(0);j<m;++j)lt[i][j]=read(),num[i][j]=read(); int w=read(); for(int i(1);i<=n;++i){ int fst=m-1; while(!lt[i][fst])--fst; int nxt=fst; for(int j=fst-1;j>=0;j--){ nx[j][0]=nxt; if(lt[i][j])nxt=j; } for(int j(fst);j<m;++j)nx[j][0]=nxt; for(int k(1);k<20;++k) for(int j(0);j<m;++j) nx[j][k]=nx[nx[j][k-1]][k-1]; int stp=num[i][w];(ans+=stp)%=20123; if(lt[i][w]) stp--; // cout<<w<<'\n'; for(int k(20);~k;--k)if(stp&(1<<k))w=nx[w][k]; } printf("%d",ans); //printf("%lld",ans); return 0; } ```
by __zaa__ @ 2024-04-12 07:52:32


@[__zaa__](/user/716965) 噢噢谢谢!
by 无钩七不改名 @ 2024-04-12 17:59:20


|