codeforeces 239B

题目:http://codeforces.com/problemset/problem/239/B


读题读了半天,才明白题意。。题意:给个字符串,有Q次询问,询问区间【l,r】里数字0-9出现的次数。题意中给定了两个规则。按着两个规则做就行,其实就是个模拟题,但是有些细节需要注意。模拟题还是要考虑周全啊。

#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
char str[110];
int ans[22];
int main(){
    int n,q,l,r;
    scanf("%d%d",&n,&q);
    scanf("%s",str+1);
    while(q--){
        scanf("%d%d",&l,&r);
        memset(ans,0,sizeof(ans));
        string temp="";
        for(int i=l;i<=r;i++) temp+=str[i];
        int cur=0;  int add=1;
        while(1){
            if(cur<0||cur>=temp.size())  break;
            if(temp[cur]>='0'&&temp[cur]<='9'){
                   ans[  temp[cur]-'0' ]++;
                if(temp[cur]=='0') { temp.erase(temp.begin()+cur);if(add==-1) cur--; }
                else                temp[cur]--,cur+=add;
            }
            else{
               if(temp[cur]=='>')  {
                   add=1;
                   cur=cur+add;
                   if(cur>=temp.size()||cur<=-1) break;
                 if(temp[cur]=='>'||temp[cur]=='<'){
                       temp.erase(temp.begin()+cur-1);
                       cur--;
                 }
               }
               if(temp[cur]=='<')   {
                     add=-1;
                    cur=cur+add;
                   if(cur>=temp.size()||cur<=-1) break;
                if(temp[cur]=='>'||temp[cur]=='<')
                     temp.erase(temp.begin()+cur+1);
               }
            }
        }
        for(int i=0;i<=9;i++) printf("%d ",ans[i]); printf("\n");


    }

    return 0;
}




你可能感兴趣的:(codeforeces 239B)