原题地址:新斯诺克

题目描述 Description

斯诺克又称英式台球,是一种流行的台球运动。在球桌上,台面四角以及两长边中心位置各有一个球洞,使用的球分别为1 个白球,15 个红球和6 个彩球(黄、绿、棕、蓝、粉红、黑)共22个球。

击球顺序为一个红球、一个彩球直到红球全部落袋,然后以黄、绿、棕、蓝、粉红、黑的顺序逐个击球,最后以得分高者为胜。斯诺克的魅力还在于可以打防守球,可以制造一些障碍球使对方无法击打目标球而被扣分。正是因为这样,斯诺克是一项充满神奇的运动。

现在考虑这样一种新斯诺克,设母球(母球即是白球,用于击打其他球)的标号为M,台面上有N 个红球排成一排,每一个红球都有一个标号,他们的标号代表了他们的分数。

现在用母球击打这些红球,一杆击打,如果母球接触到红球,就称为“K 到红球”。我们假设,一次可以击打任意多相邻连续的红球,也可以只击打一个球。并且红球既不会落袋,也不会相互发生碰撞,而只是停留在原处。每次击打时候,要想“K 到红球”,至少要击打一个红球,如果想一次击打多个红球,那么击打的红球必须是依次连续排列的。如果一次“K 到红球”所有红球的标号之和的平均数大于母球的标号M,就获得了一个“连击”。

现在请你计算总共能有多少种“连击”方案。

注意:如果当前有标号为1、2、3 的三种红球,母球标号为0,有如下6 种获得“连击”方案:( 1)、( 2)、( 3)、( 1,2)、( 2,3)、( 1,2,3)

输入描述 Input Description

共有两行。

第一行是N,M (N<=100000,M<=10000) ,N 表示台面上一共有N 个红球,M 表示母球的标号。

第二行是N 个正整数,依次表示台面上N 个红球的标号,所有标号均不超过10000。

输出描述 Output Description

只有一个数,为“连击”的方案总数。

样例输入 Sample Input

4 3

3 7 2 4

样例输出 Sample Output

7

输出情况:

(7),(2),(4),(3,7),(3,4),(3,7,2),(3,2,4),(3,7,2,4)

解题思路:

首先,此题抽象来看是想从一组数中找出所有的顺序对,且顺序对的平均数大于某一个数,统计有多少个这样的数。按照这个思路想到的是分治法中的归并排序思想,不过我先对这题做些化简,把所有红球的标号减去母球的标号,之后我只需要看是否大于0即可知道是否满足条件,还有一个地方注意一下,标号可以是负数,所以用一个read()函数进行处理,数组下标从1开始,其他下标值先置为0,方便之后比较,接着再将数组进行前缀和运算(数组a[ i ] = 当前数 - 母球数 + a[ i - 1 ]) ,记住数组是从1开始存的,得出的数组通过归并排序函数中比较一下并统计顺序对即可算出最终个数。

 代码如下:

 #include<cstdio>
#include<iostream>
using namespace std; int n, m, a[], b[];
long long ans; int read() {
//x是计算位数用的,f是判断正负号
int x = , f = ; char ch = getchar();
while (ch<'' || ch>'')
{
if (ch == '-')
f = -;
ch = getchar();
}
while (ch >= ''&&ch <= '')
{
x = x * + ch - '';
ch = getchar();
}
return x * f;
} void Merge_sort(int l, int r) {
if (l >= r)
return;
int mid = (l + r) / ;
Merge_sort(l, mid);
Merge_sort(mid + , r);
int i = l, j = mid + , k = l;
while (i <= mid && j <= r) {
if (a[i] < a[j])
{
b[k++] = a[i++];
ans += r - j + ;//统计顺序对,(r-j+1)算出的结果就是当前条件下的顺序对
}
else b[k++] = a[j++];
}
while (i <= mid)
b[k++] = a[i++];
while (j <= r)
b[k++] = a[j++];
for (int w = l; w <= r; w++)
a[w] = b[w];
} int main() {
n = read(); m = read();
for (int i = ; i <= n; i++) {
a[i] = read() - m + a[i - ];//求前缀和
}
Merge_sort(, n);
cout << ans << endl;
return ;
}

可能我的描述还不清楚,可以结合代码自己演算或者调试一下,要先理解题目的要求和了解归并排序和前缀和的思想,不然会比较吃力,当然还有其他算法(听说树状数组可以做,暂时不会( ̄_ ̄|||))可以解决此题,大家可以借鉴我的做法

CODEVS-新斯诺克的更多相关文章

  1. codevs 3324 新斯诺克

    3324 新斯诺克  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 白银 Silver   题目描述 Description 斯诺克又称英式台球,是一种流行的台球运动.在球桌上, ...

  2. Codevs3324 新斯诺克

    题目描述 Description 斯诺克又称英式台球,是一种流行的台球运动.在球桌上,台面四角以及两长边中心位置各有一个球洞,使用的球分别为1 个白球,15 个红球和6 个彩球(黄.绿.棕.蓝.粉红. ...

  3. 【u249】新斯诺克

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 斯诺克又称英式台球,是一种流行的台球运动.在球桌上,台面四角以及两长边中心位置各有一个球洞,使用的球分 ...

  4. 斯诺克台球比赛规则 (Snooker)

    斯诺克台球比赛规则 斯诺克(Snooker)的意思是“阻碍.障碍”,所以斯诺克台球有时也被称为障碍台球.此项运动使用的球桌长约3569毫米.宽1778毫米,台面四角以及两长边中心位置各有一个球洞,使用 ...

  5. Java版斯诺克开源分享

    Java版斯诺克开源分享 这个小程序是我平时无聊写着玩的,在网盘里躺了好久了,今天就把它拿出来跟大家分享一下,下面是游戏截图: 请不要吐槽这个界面,斯诺克的球台是我从qq游戏里面截取的... 下面是源 ...

  6. P2645 斯诺克 题解

    P2645 斯诺克 题目背景 镇海中学开设了很多校本选修课程,有体育类.音乐类.美术类.无线电测向.航空航海航天模型制作等,力争使每位学生高中毕业后,能学到一门拿得出手的兴趣爱好,为将来的终身发展打下 ...

  7. 用HTML 5打造斯诺克桌球俱乐部(1) – 51CTO.COM

    本文介绍了如何利用HTML5技术来打造一款非常酷的斯诺克桌球游戏,文章中详细地列… 查阅全文 ›

  8. 洛谷 题解 P2645 【斯诺克】

    吐槽一下这道题: 数据太水了!!! 请注意,这题如果你考虑了犯规的情况,那么你的分数...可能会和我一样,只有40分. 也就是说,这是一篇AC不了这道题的题解!!! 现在,我来讲一下这道题的正解: 两 ...

  9. OI 刷题记录——每周更新

    每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...

随机推荐

  1. [Linux] Big-endian and Little-endian (大小端模式)

    Big-endian Little-endian 大小端模式   https://en.wikipedia.org/wiki/Endianness 大端模式,是指数据的高字节保存在内存的低地址中,而数 ...

  2. Differential expression analysis for paired RNA-seq data 成对RNA-seq数据的差异表达分析

    Differential expression analysis for paired RNA-seq data 抽象背景:RNA-Seq技术通过产生序列读数并在不同生物条件下计数其频率来测量转录本丰 ...

  3. 初识STM32

    1.什么是STM32 A.ST是意法半导体,一个公司名,即SOC厂商,生产芯片的厂商.ARM公司是IP厂商,即只生产内核的厂商. B.M-Microelectronics的缩写,表示微控制器,大家注意 ...

  4. background image

    http://www.ajaxblender.com/bgstretcher-2-jquery-stretch-background-plugin-updated.html http://blog.d ...

  5. Spring MVC的handlermapping之请求分发如何找到正确的Handler(BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping)

    本文讲的是Spring MVC如何找到正确的handler, 前面请求具体怎么进入到下面的方法,不再细说. 大概就是Spring mvc通过servlet拦截请求,实现doService方法,然后进入 ...

  6. Weblogic的中的文件上传

    在weblogic中在jsp页面中this.getServletContext().getRealPath("/upload")这样的写法是要报错的在jsp页面总你甚至不能使用th ...

  7. Oracle学习笔记(十)

    光标(游标)概念引入 就是一个结果集(查询或者其他操作返回的结果是多个时使用)定义一个光标 cursor c1 is select ename from emp: 从光标中取值 打开光标: --ope ...

  8. VR眼镜和AR眼镜的区别

    VR眼镜是纯虚拟的世界建模,不结合现实世界.(VR一体机和手机VR眼镜是不同的,不只是是不是以手机为载体播放器的问题,而是它们结构上也有很大的区别:另外还有一点就是电脑端VR,这个主要是游戏:http ...

  9. FTP服务器的搭建与安全配置

    FTP可以说是Internet上使用非常广泛的一种通讯协议了.它工作在OSI模型的第7层,是TCP/IP的一种具体应用.FTP采用基于TCP的可靠连接:监听21端口来等待控制连接请求,当连接建立后,采 ...

  10. 重拾C语言基础知识

    从实习到工作两年多的时间了,虽然感觉学到了很多知识,但是事实上却将立足之本的基础知识给忘了个精光.也许跟自己没有出去找工作有关,没有好好的将C语言的基础牢牢掌握. 从现在开始吧!好好的重温基础,做一名 ...