結果
問題 |
No.3244 Range Multiple of 8 Query
|
ユーザー |
|
提出日時 | 2025-08-22 23:08:30 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,260 bytes |
コンパイル時間 | 3,210 ms |
コンパイル使用メモリ | 284,616 KB |
実行使用メモリ | 16,068 KB |
最終ジャッジ日時 | 2025-08-22 23:09:25 |
合計ジャッジ時間 | 52,246 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 35 WA * 5 |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll=long long; int main(){ int n,q; cin>>n>>q; string s; cin>>s; vector<vector<int>> nxt(10,vector<int>(n)); for(int i=0;i<10;i++){ int now=-1; for(int j=0;j<n;j++){ nxt[i][j]=now; if((s[j]-'0')==i)now=j; } } while(q--){ int l,r; cin>>l>>r; l--; if(l+1==r){ if(s[l]=='0'||s[l]=='8')cout<<0<<endl; else cout<<-1<<endl; }else if(l+2==r){ int a=(s[l]-'0'),b=(s[l+1]-'0'); if((10*a+b)%8==0)cout<<0<<endl; else if((10*b+a)%8==0)cout<<1<<endl; else cout<<-1<<endl; }else{ int ans=1e9; for(int i=0;i<1000;i+=8){ auto t=to_string(i); reverse(t.begin(),t.end()); while(t.size()<3)t+="0"; int res=0; vector<int> idx(3); for(int j=0;j<3;j++){ int now=r-1; for(int k=0;k<j;k++){ if(t[j]==t[k])now=idx[k]-1; } if(s[now]==t[j]){ idx[j]=now; continue; } if(nxt[t[j]-'0'][now]<l){ res=-1; break; } idx[j]=nxt[t[j]-'0'][now]; } if(res==-1)continue; res=3*r-6-(idx[0]+idx[1]+idx[2]); if(idx[0]<idx[1])res++; if(idx[1]<idx[2])res++; if(idx[0]<idx[2])res++; ans=min(ans,res); } if(ans==1e9)cout<<-1<<endl; else cout<<ans<<endl; } } }