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