結果
問題 |
No.3244 Range Multiple of 8 Query
|
ユーザー |
|
提出日時 | 2025-08-22 23:03:20 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,165 bytes |
コンパイル時間 | 3,352 ms |
コンパイル使用メモリ | 286,400 KB |
実行使用メモリ | 24,804 KB |
最終ジャッジ日時 | 2025-08-22 23:03:47 |
合計ジャッジ時間 | 27,032 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 23 TLE * 1 -- * 16 |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll=long long; int main(){ int n,q; cin>>n>>q; string s; cin>>s; vector<set<int>> ss(10); for(int i=0;i<n;i++){ ss[s[i]-'0'].insert(-i); } 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; } auto itr=ss[t[j]-'0'].lower_bound(-now); if(itr==ss[t[j]-'0'].end()||-(*itr)<l){ res=-1; break; } idx[j]=-(*itr); } 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; } } }