预处理打表,sum[i][j]表示1.。。。。i这些数字中 j 有几个。然后就很好处理询问了。
#include<stdio.h> #include<math.h> #include<string.h> int sum[100000+10][15]; char s[100000+10]; int n,m; void init() { memset(sum,0,sizeof sum); int t=1; for(int i=0; s[i]; i++) { int num=s[i]-'0'; for(int j=0; j<=9; j++) sum[t][j]=sum[t-1][j]; sum[t][num]++; t++; } } int main() { while(~scanf("%d%d",&n,&m)) { scanf("%s",s); init(); for(int i=1; i<=m; i++) { int q; scanf("%d",&q); int num=s[q-1]-'0'; int B1=0,B2=0; for(int j=0; j<=9; j++) { if(j<num&&sum[q][j]) { B1=B1+sum[q][j]*(num-j); } } for(int j=0; j<=9; j++) { if(j>num&&sum[q][j]) { B2=B2+sum[q][j]*(j-num); } } if(B1==B2) printf("Next time\n"); else if(B1>B2) printf("Keep some distance from me\n"); else printf("I agree\n"); } } return 0; }