题目描述

六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量。

大魔法师有mm个魔法物品,编号分别为1,2,...,m1,2,...,m。每个物品具有一个魔法值,我们用X_iXi​表示编号为i的物品的魔法值。每个魔法值Xi是不超过n的正整数,可能有多个物品的魔法值相同。

大魔法师认为,当且仅当四个编号为a,b,c,da,b,c,d的魔法物品满足x_a<x_b<x_c<x_d,X_b-X_a=2(X_d-X_c)xa​<xb​<xc​<xd​,Xb​−Xa​=2(Xd​−Xc​),并且x_b-x_a<(x_c-x_b)/3xb​−xa​<(xc​−xb​)/3时,这四个魔法物品形成了一个魔法阵,他称这四个魔法物品分别为这个魔法阵的AA物品,BB物品,CC物品,DD物品。

现在,大魔法师想要知道,对于每个魔法物品,作为某个魔法阵的AA物品出现的次数,作为BB物品的次数,作为CC物品的次数,和作为DD物品的次数。

输入输出格式

输入格式:

第一行包含两个空格隔开的正整数n,mn,m。

接下来mm行,每行一个正整数,第i+1i+1行的正整数表示X_iXi​,即编号为ii的物品的魔法值。

保证1 \le n \le 150001≤n≤15000,1 \le m \le 400001≤m≤40000,1 \le Xi \le n1≤Xi≤n。每个X_iXi​是分别在合法范围内等概率随机生成的。

输出格式:

共mm行,每行44个整数。第ii行的44个整数依次表示编号为ii的物品作 为A,B,C,DA,B,C,D物品分别出现的次数。

保证标准输出中的每个数都不会超过10^9109。每行相邻的两个数之间用恰好一个空格隔开。

输入输出样例

输入样例#1: 复制

30 8
1
24
7
28
5
29
26
24
输出样例#1: 复制

4 0 0 0
0 0 1 0
0 2 0 0
0 0 1 1
1 3 0 0
0 0 0 2
0 0 2 2
0 0 1 0
输入样例#2: 复制

15 15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
输出样例#2: 复制

5 0 0 0
4 0 0 0
3 5 0 0
2 4 0 0
1 3 0 0
0 2 0 0
0 1 0 0
0 0 0 0
0 0 0 0
0 0 1 0
0 0 2 1
0 0 3 2
0 0 4 3
0 0 5 4
0 0 0 5

说明

【样例解释1】

共有55个魔法阵,分别为:

物品1,3,7,61,3,7,6,其魔法值分别为1,7,26,291,7,26,29;

物品1,5,2,71,5,2,7,其魔法值分别为1,5,24,261,5,24,26;

物品1,5,7,41,5,7,4,其魔法值分别为1,5,26,281,5,26,28;

物品1,5,8,71,5,8,7,其魔法值分别为1,5,24,261,5,24,26;

物品5,3,4,65,3,4,6,其魔法值分别为5,7,28,295,7,28,29。

以物品55为例,它作为AA物品出现了11次,作为BB物品出现了33次,没有作为CC物品或者DD物品出现,所以这一行输出的四个数依次为1,3,0,01,3,0,0。

此外,如果我们将输出看作一个mm行44列的矩阵,那么每一列上的mm个数之和都应等于魔法阵的总数。所以,如果你的输出不满足这个性质,那么这个输出一定不正确。你可以通过这个性质在一定程度上检查你的输出的正确性。

【数据规模】

首先吐槽一下,本来是考试前准备放松心情的,可最后的那个优化还是没有想到,心态爆炸,难受

第一个思路肯定就是m^4的纯模拟算法,可以拿到60分。

之后看到想法1根本没有用到题目中给定的n,n比m小,而且如果两个物品的魔法值相等,那么他们可以作为的魔法阵的情况也一定是一样的,可以考虑搞一个桶,题给条件中是有一个等式的,所以只需要枚举a,b,c,优化到n^3

仍然是TLE的,大概可以通过的算法是n^2,还需要再去掉一重,只能是前缀和优化了(反正我是没有想到23333)

分析一下全部的条件

a<b<c<d

b-a=2*(d-c)

3*(b-a)<c-b

整理一下,令d-c=t,则可以得到

b-a=2*t

b-c>6*t

如果枚举t的值,再枚举d的值,还需要枚举出全部的a,b,但是这时就可以考虑前缀和优化了,因为只要对于较小的c,d满足的a,b一定对于较大的c,d满足,所以可以再去掉一重循环。

 #include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,res[][],a[],t[];
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d",&a[i]);
t[a[i]]++;
}
for(int i=;*i<=n;i++)
{
int sum=,va,vb,vc,vd;
for(vd=*i+;vd<=n;vd++)
{
va=vd-*i-;
vb=va+*i;
vc=vd-i;
sum+=t[va]*t[vb];
res[][vc]+=sum*t[vd];
res[][vd]+=sum*t[vc];
}
sum=;
for(va=n-*i-;va>=;va--)
{
vb=va+*i;
vc=vb+*i+;
vd=vc+i;
sum+=t[vc]*t[vd];
res[][va]+=sum*t[vb];
res[][vb]+=sum*t[va];
}
}
for(int i=;i<=m;i++)
printf("%d %d %d %d\n",res[][a[i]],res[][a[i]],res[][a[i]],res[][a[i]]);
return ;
}

洛谷 P2119 魔法阵的更多相关文章

  1. 洛谷P2119 魔法阵

    P2119 魔法阵 题目描述 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量. 大魔法师有m个魔法物品,编号分别为1,2,...,m.每个物品具有一个魔法值,我们用Xi表示编 ...

  2. 洛谷P1585 魔法阵

    题目传送门 这题就是一个有技巧的DFS+一大堆乱七八糟的剪枝 进行DFS时注意一下以下点 根据题意,我们可以把DFS分成两块,即1--n*m/2与n*m/2--n*m,第一块边找边记录,第二块就开始计 ...

  3. [洛谷P2730] 魔板 Magic Squares

    洛谷题目链接:魔板 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都 ...

  4. P2119 魔法阵

    原题链接  https://www.luogu.org/problemnew/show/P2119 YY同学今天上午给我们讲了这个题目,我觉得她的思路很好,特此写这篇博客整理一下. 50分:暴力枚举 ...

  5. 洛谷P2730 魔板 [广搜,字符串,STL]

    题目传送门 魔板 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都有 ...

  6. 洛谷 P2730 魔板 Magic Squares 解题报告

    P2730 魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 ...

  7. 洛谷P1275 魔板

    P1275 魔板 题目描述 有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格.每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗).我们可以通过若干操作使魔板从一个状态改变为另一个状 ...

  8. 洛谷 P2730 魔板 Magic Squares

    P2730 魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 ...

  9. 洛谷 P1275 魔板

    P1275 魔板 题目描述 有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格.每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗).我们可以通过若干操作使魔板从一个状态改变为另一个状 ...

随机推荐

  1. 深入理解消息中间件技术之RabbitMQ服务

    什么叫消息队列? 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象. 消息队列(Message Queue)是一种应用间的通信方式, ...

  2. 深入浅出Tomcat/3 - Tomcat生命周期

    在上面的部分,其实我们已经接触到Tomcat的生命周期了,接下来我们将仔细讨论和学习Tomcat的生命周期的具体实现. LifeCycle接口 这个LifeCycle接口上面在讲解Server和Ser ...

  3. 扒一拔:Java 中的泛型(一)

    目录 1 泛型 1.1 为什么需要泛型 1.2 类型参数命名规约 2 泛型的简单实用 2.1 最基本最常用 2.2 简单泛型类 2.2.1 非泛型类 2.2.2 泛型类的定义 2.2.3 泛型类的使用 ...

  4. HBase篇(3)-架构详解

    [每日五分钟搞定大数据]系列,HBase第三篇 聊完场景和数据模型我们来说下HBase的架构,在网上找了张比较清晰的图,我觉得这张图能说明很多问题,那这一篇我们就重点来解析下这张图 角色与职责 先介绍 ...

  5. pycharm 安装和首次使用

    由于本人也是开发语言的学习小白,所以对于开发时使用的工具也不算太熟悉,不过这里还是要推荐一下本人使用过 的两款工具: 1.pycharm  :2.eclipse 这是我用的比较顺手的两个工具当然这两个 ...

  6. long long 的输入输出问题

    参考博客:https://www.byvoid.com/zhs/blog/c-int64

  7. github导入文件操作

    建立本地仓库: 创建新仓库的指令: git init //把这个目录变成Git可以管理的仓库 git add README.md //文件添加到仓库 git add . //不但可以跟单一文件,还可以 ...

  8. Python_生成随机百分比的方法

    可以使用random模块去实现,给定1到100的空间,使用random的choice的方法随机选取一个数字,当这个数字在某个区间时就可以认定为出发了指定的百分比的概率. 这个简单的逻辑也可以在需要时扩 ...

  9. sqlserver笔记

    表结构: 一,字段类型sqlserver jdbc java char char Stringnchar nchar Stringvarchar varchar Stringnvarchar nvar ...

  10. MySQL 深入浅出数据库索引原理(转)

    本文转自:https://www.cnblogs.com/aspwebchh/p/6652855.html 前段时间,公司一个新上线的网站出现页面响应速度缓慢的问题, 一位负责这个项目的但并不是搞技术 ...