首页 > 代码库 > 位查询【 openjudge数据结构课程练习题】
位查询【 openjudge数据结构课程练习题】
/*=======================================================位查询http://dsalgo.openjudge.cn/linearlists/3/总时间限制:5000ms 内存限制: 65536kB描述 给出N个范围在[0, 65535]的整数,编程支持以下的操作: (1)修改操作:C d,所有的数都增加d。如果超过65535,把结果模65536。 0 <= d <= 65535 (2)查询操作:Q i,统计在N个正整数中有多少个整数其对应的二进制形式的第i位二进制位为非0。0 <= i <= 15。并且最低位i为0。 最后,输出所有查询操作的统计值。输入 输入的第一行为两个正整数N,M,其中N为操作的整数的个数,而M为具体有多少个操作。 输入的第二行为N个正整数,为进行操作的N个正整数。 下面有M行,分别表示M个操作。 数据范围:N<=100000,M<=200000输出 输出所有查询操作Q的统计值,每一个查询操作统计结果输出为一行。样例输入 3 5 1 2 4 Q 1 Q 2 C 1 Q 1 Q 2样例输出 1 1 2 1提示 只输出查询操作Q的统计值。=========================================================*/
这个题目要注意输入数据时不要忘记清除回车符。
1 #include<stdio.h> 2 #include<math.h> 3 #include<stdlib.h> 4 int main() 5 { 6 long N,M; 7 long *a; 8 char ch; 9 long j,d;10 long i;11 long ans;12 freopen("data.in","r",stdin);13 freopen("data.out","w",stdout);14 scanf("%ld%ld",&N,&M);15 16 a=(long *)malloc(N*sizeof(long));17 for(j=0;j<N;j++) scanf("%ld",&a[j]);18 getchar();//注意这里。19 for(j=0;j<M;j++)20 {21 scanf("%c %ld",&ch,&d);22 getchar();//注意这里。23 /*printf("%c %ld\n",ch,d);*/24 25 if(ch==‘C‘)26 {27 for(i=0;i<N;i++)28 a[i]=(a[i]+d)%65535;29 }30 else if(ch==‘Q‘)31 {32 ans=0;33 d=pow(2,d);34 for(i=0;i<N;i++)35 if(a[i]&d) ans++;36 printf("%ld\n",ans);37 }38 else printf("input error!ch==%c\n",ch);39 }40 return 0;41 }
位查询【 openjudge数据结构课程练习题】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。