打卡信奥刷题(3016)用C++实现信奥题 P6334 [COCI 2007/2008 #1] SREDNJI
P6334 [COCI 2007/2008 #1] SREDNJI题目描述给定一个长度为n nn的1 ∼ n 1\sim n1∼n的排列a 1 , … , a n a_1,\dots ,a_na1,…,an请你找出这个排列有多少个长度为奇数的子串的中位数为B BB。子串定义把这个排列从开头可能无和从结尾可能无分别删去一些数后得到的剩下的数列。中位数定义将一个数列从小到大排序后排在中间的那个数字。输入格式输入第一行为两个整数n , B n,Bn,B。第二行包含n nn个整数为一个1 ∼ n 1\sim n1∼n的排列。输出格式输出中位数为B BB的长度为奇数的子串的个数。输入输出样例 #1输入 #15 4 1 2 3 4 5输出 #12输入输出样例 #2输入 #26 3 1 2 4 5 6 3输出 #21输入输出样例 #3输入 #37 4 5 7 2 4 3 1 6输出 #34说明/提示样例3 33解释所有可能的情况47 2 45 7 2 4 35 7 2 4 3 1 6。数据规模与约定对于100 % 100\%100%的数据保证1 ≤ n ≤ 10 5 1\le n\le 10^51≤n≤1051 ≤ B ≤ n 1\le B\le n1≤B≤n。说明题目译自 COCI2007-2008 CONTEST #1T5 SREDNJIC实现#includebits/stdc.husingnamespacestd;intn,b;inta[100005];intsum1,sum2;intcnt[200005];//注意考虑负数情况故数组开两倍intpos;intmain(){scanf(%d%d,n,b);for(inti1;in;i)scanf(%d,a[i]);for(inti1;in;i)if(a[i]b){posi;break;}for(inti0;ipos-1;i)//由于i的范围为1~pos,这里直接枚举i-1的范围为0~pos-1{if(a[i]b)sum1;if(a[i]b)sum2;cnt[sum1-sum2n];//用桶计数n排除负数情况}intans0;for(intipos;in;i){if(a[i]b)sum1;if(a[i]b)sum2;anscnt[sum1-sum2n];//统计答案}printf(%d\n,ans);return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2451317.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!