UESTC 1269 ZhangYu Speech 预处理、前缀和

ProLightsfx 2016-4-4 127 4/4

ZhangYu Speech 预处理、前缀和

Source

第七届ACM趣味程序设计竞赛第四场(正式赛)B

My Solution

打表搞出前n项和;//像这样输入一次数据,然后n(n<1e6)次询问的,一般要预处理一下,来减少复杂度;
主要是找出x前的所有数的和与line[x-1]*x比较,如果前面的和大一点,说明负数和大;如果小,说明正数和大;相等,则相等;
这样省去了每次做差的麻烦;
#include 
#include 
//#define LOCAL
const int maxn=100008;
char ch[maxn];
int line[maxn],sum[maxn];
using namespace std;

int main()
{
    #ifdef LOCAL
    freopen("a.txt","r",stdin);
    #endif // LOCAL
    int n,m,x,t;
    scanf("%d%d",&n,&m);
    scanf("%s",ch);
    //直接先转化过来,这样扫一遍就好了。不然要好多边临时的转化
    for(int i=0;i<n;i++){
        line[i]=ch[i]-'0';
    }
    //直接预处理出前i项和  前缀和
    t=0;
    for(int i=0;i<n;i++){
    	t+=line[i];
    	sum[i]=t;
    }
    //每次询问直接用sum[x-1];
    while(m--){
        scanf("%d",&x);

        //x1=ch[x-1]-'0';//cout<<x1<<" ";
        if(sum[x-1]-line[x-1]*(x)<0) printf("Keep some distance from me"); else if(sum[x-1]-line[x-1]*(x)>0) printf("I agree");
        else if(sum[x-1]-line[x-1]*(x)==0)printf("Next time");
        if(m) printf("n");
    }

    return 0;
}

非特殊说明,本博所有文章均为博主原创,未经许可不得转载。

https://www.prolightsfxjh.com/

Thank you!

                                                                                                                                             ------from ProLightsfx

- THE END -

ProLightsfx

11月16日01:17

最后修改:2024年11月16日
0

非特殊说明,本博所有文章均为博主原创,未经许可不得转载。

共有 0 条评论