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 -
最后修改:2024年11月16日
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
如经许可后转载,请注明出处:https://prolightsfxjh.com/article/uestc-1269-zhangyu-speech/
共有 0 条评论