【u249】新斯诺克
Time Limit: 1 second
Memory Limit: 128 MB
【问题描述】
斯诺克又称英式台球,是一种流行的台球运动。在球桌上,台面四角以及两长边中心位置各有一个球洞,使用的球分别为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)
【输入格式】
输入文件sheeta.in 共有两行,第一行是N,M (N<=100000,M<=10000) ,N 表示台面上一共有N 个红球,M 表示母球的标号。
第二行是N 个正整数,依次表示台面上N 个红球的标号,所有标号均不超过10000。
【输出格式】
输出文件sheeta.out 只有一个数,为“连击”的方案总数。
【数据规模】
Sample Input1
4 3
3 7 2 4
Sample Output1
7
【题目链接】:http://noi.qz5z.com/viewtask.asp?id=u249
【题解】
大概就是说给你一个母球M,然后给你N个球,这N个球的的编号各不相同.然后其并列排成一排,问你
这个球打过去能最多得多少分。。,这个分的平均数要大于M。【原谅我的语言表达能力】
(相当于让你选择连续的序列,序列的和的平均数大于M,问这样的子连续序列的个数);
好的 我们以样例开始讲解
3 7 2 4
我们设一个sum[i]数组,表示1到i求编号加起来的和如sum[2]=10;sum[1]=3;
好的可以看出来符合题意的击球是这样的(sum[i]-sum[j])/(i-j)>M
左边为平均数。右边为要大于的M,
这样以后将其移项一下。
就能得到sum[i]-sum[j]>M*i-M*j
再移动得到sum[i]-M*i>sum[j]-M*j;
然后把sum[i]-M*i看成一个整体v1[i];
sum[j]-M*j看成一个整体V2[j];
则符合题意的击球满足v1[i]>v2[j]且i>j;
把那个v数组取反;
则v1’[i] < v2’[j] 且i>j;
这样就转换成一个求逆序对的模型了;
再加入一个v[0]=0;从0-n这个数组中求逆序对就可以;
如果不加0这个数组
如sum[1]-sum[0]指的就是只击打1的情况如果从1开始则会漏解;
且任何从1开始连续的都会被漏掉;
【完整代码】
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <set>
#include <map>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <stack>
#include <string>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
void rel(LL &r)
{
r = 0;
char t = getchar();
while (!isdigit(t) && t!='-') t = getchar();
LL sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
}
void rei(int &r)
{
r = 0;
char t = getchar();
while (!isdigit(t)&&t!='-') t = getchar();
int sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
}
const int MAXN = 1e5+100;
const int dx[5] = {0,1,-1,0,0};
const int dy[5] = {0,0,0,-1,1};
const double pi = acos(-1.0);
int n,m;
int v[MAXN],temp[MAXN],sum[MAXN]={0};
LL ans = 0;
void mergesort(int l,int r)
{
if (l==r) return;
int m = (l+r)>>1;
mergesort(l,m);mergesort(m+1,r);
int i = l,j = m+1,k=l;
while (i <= m && j <= r)
if (v[i] > v[j])
ans+=m-i+1,temp[k++] = v[j++];
else
if (v[i] <= v[j])
temp[k++] = v[i++];
while (i <= m) temp[k++] = v[i++];
while (j <= r) temp[k++] = v[j++];
rep1(i,l,r) v[i] = temp[i];
}
int main()
{
//freopen("F:\\rush.txt","r",stdin);
rei(n);rei(m);
rep1(i,1,n)
{
int x;
rei(x);
sum[i] = sum[i-1]+x;
v[i] = -sum[i]+i*m;
}
v[0] = 0;
mergesort(0,n);
cout << ans << endl;
return 0;
}
【u249】新斯诺克的更多相关文章
- Codevs3324 新斯诺克
题目描述 Description 斯诺克又称英式台球,是一种流行的台球运动.在球桌上,台面四角以及两长边中心位置各有一个球洞,使用的球分别为1 个白球,15 个红球和6 个彩球(黄.绿.棕.蓝.粉红. ...
- codevs 3324 新斯诺克
3324 新斯诺克 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 白银 Silver 题目描述 Description 斯诺克又称英式台球,是一种流行的台球运动.在球桌上, ...
- CODEVS-新斯诺克
原题地址:新斯诺克 题目描述 Description 斯诺克又称英式台球,是一种流行的台球运动.在球桌上,台面四角以及两长边中心位置各有一个球洞,使用的球分别为1 个白球,15 个红球和6 个彩球(黄 ...
- 斯诺克台球比赛规则 (Snooker)
斯诺克台球比赛规则 斯诺克(Snooker)的意思是“阻碍.障碍”,所以斯诺克台球有时也被称为障碍台球.此项运动使用的球桌长约3569毫米.宽1778毫米,台面四角以及两长边中心位置各有一个球洞,使用 ...
- Java版斯诺克开源分享
Java版斯诺克开源分享 这个小程序是我平时无聊写着玩的,在网盘里躺了好久了,今天就把它拿出来跟大家分享一下,下面是游戏截图: 请不要吐槽这个界面,斯诺克的球台是我从qq游戏里面截取的... 下面是源 ...
- P2645 斯诺克 题解
P2645 斯诺克 题目背景 镇海中学开设了很多校本选修课程,有体育类.音乐类.美术类.无线电测向.航空航海航天模型制作等,力争使每位学生高中毕业后,能学到一门拿得出手的兴趣爱好,为将来的终身发展打下 ...
- 用HTML 5打造斯诺克桌球俱乐部(1) – 51CTO.COM
本文介绍了如何利用HTML5技术来打造一款非常酷的斯诺克桌球游戏,文章中详细地列… 查阅全文 ›
- 洛谷 题解 P2645 【斯诺克】
吐槽一下这道题: 数据太水了!!! 请注意,这题如果你考虑了犯规的情况,那么你的分数...可能会和我一样,只有40分. 也就是说,这是一篇AC不了这道题的题解!!! 现在,我来讲一下这道题的正解: 两 ...
- OI 刷题记录——每周更新
每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...
随机推荐
- HDU 4696 Answers 水题
http://acm.hdu.edu.cn/showproblem.php?pid=4696 由题意可知 1<=Ci<=2 而且图上一定有环 那么我们可以得出: 只要存在奇环(即Ci=1) ...
- 清除celery 任务队列
celery 有密码的时候 清除任务 redis-cli -h host -p port -a password -n 11 ltrim transcode 0 196 没有密码的时候 redis-c ...
- django模型系统二
常用查询及表关系的实现 1.常用查询 每一个django模型类,都有一个默认的管理器 objects QuerySet表示数据库中对象的列表,它可以有0到多个过滤器.过滤器通过给定参数,缩小查询范围. ...
- MFC中对话框的各种消息触发时间
小结:WM_CREATE是所有窗口都能响应的消息,表明本窗口已经创建完毕.可以安全的使用这个窗口了,例如在它上面画控件等等.这个状态肯定是在调用ShowWindows()显示窗口之前.WM_WM_IN ...
- BZOJ3277: 串(后缀自动机,Parent树,Dfs序)
Description 字符串是oi界常考的问题.现在给定你n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中 至少k个字符串的子串(注意包括本身). Input 第一行两个整数n, ...
- hibernate中的事务管理是怎么概念?
1.JDBC事务 JDBC 事务是用 Connection 对象控制的.JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交. ja ...
- 【Oracle错误集锦】:PLSQL无法直连64位Oracle11g数据库
背景:Oracle数据库装在本机上,使用PLSQL连接. 今天安装完Oracle 11g数据库后.用plsql连接数据库死活都连接不上.而且plsql客户端登录窗体的Database下拉框还为空.见下 ...
- BeautifulSoup的高级应用 之 contents children descendants string strings stripped_strings
继上一节.BeautifulSoup的高级应用 之 find findAll,这一节,主要解说BeautifulSoup有关的其它几个重要应用函数. 本篇中,所使用的html为: html_doc = ...
- 深度学习 Deep Learning UFLDL 最新Tutorial 学习笔记 3:Vectorization
1 Vectorization 简述 Vectorization 翻译过来就是向量化,各简单的理解就是实现矩阵计算. 为什么MATLAB叫MATLAB?大概就是Matrix Lab,最根本的差别于其它 ...
- amazeui学习笔记三(你来我往1)--常见问题FAQs
amazeui学习笔记三(你来我往1)--常见问题FAQs 一.总结 1.DOM事件失败:记得加上初始化代码,例如 图片轮播 $('#my-slider').flexslider(); 2.jquer ...