結果

問題 No.3244 Range Multiple of 8 Query
ユーザー ゼリトキ
提出日時 2025-08-22 21:50:02
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,352 bytes
コンパイル時間 3,756 ms
コンパイル使用メモリ 294,868 KB
実行使用メモリ 814,428 KB
最終ジャッジ日時 2025-08-22 21:50:11
合計ジャッジ時間 7,139 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 1 WA * 16 MLE * 1 -- * 22
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (ll i = 0; i < (ll)(n); i++)
#define ll long long
const long long mod=998244353;
const long long hmod=46216567629137;
struct dat{
    deque<int>num[10];
};
int main(){
    cin.tie(0)->sync_with_stdio(0);
    cout.tie(0);
    int N,Q;
    cin>>N>>Q;
    string S;
    cin>>S;
    dat now;
    dat pos[N+1];
    for(int i=1;i<=9;i++){
        rep(j,3) now.num[i].push_back(-1);
    }
    for(int i=1;i<=N;i++){
        int now_n=S[i-1]-'0';
        now.num[now_n].push_back(i);
        if(now.num[now_n].size()>=4) now.num[now_n].pop_front();
        pos[i]=now;
    }
    int cnt[10];
    for(int z=1;z<=Q;z++){
        int l,r;
        cin>>l>>r;
        int ans=1e9;
        for(int i=8;i<1000;i+=8){
            for(int j=0;j<=9;j++) cnt[j]=2;
            string ss=to_string(i);
            while(ss.size()!=3) ss='0'+ss;
            int c=0;
            bool ok=1;
            for(int j=2;j>=0;j--){
                int p=ss[j]-'0';
                if(pos[r].num[p][cnt[p]]<l){
                    ok=0;
                }
                else{
                    c+=max(0,r-(2-j)-pos[r].num[p][cnt[p]]);
                }
                cnt[p]--;
            }
            if(ok) ans=min(ans,c);
        }
        if(ans==1e9) cout<<"-1\n";
        else cout<<ans<<"\n";
    }
}
0