题目: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;
}