题目描述

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

大魔法师有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. Python股票分析系列——获得标普500的所有公司股票数据.p6

    该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第6部分. 在之前的Python教程中,我们介绍了如何获取我们感兴趣的公司名单(在我们的案例中是 ...

  2. bootstrapValidator表单验证插件

    bootstrapValidator——一个很好用的表单验证插件,再也不用手写验证规则啦! bootstrapValidator官方文档:http://bootstrapvalidator.votin ...

  3. 计算机名称改名之后,tfs连接问题

    计算机名称改名之后,我们发现tfs连接会有问题 打开vs下的“开发人员命令提示”执行下面两条语句: 1.tf workspaces 2.tf workspaces /collection:http:/ ...

  4. 小P的秘籍

    题目描述 小P马上就要来到程序设计大赛的现场.上了,他希望能够AK这次比赛,所以他找到了一个字符串. 这个字符串长度为n,由A和K组成.这个字符串被小p称为AK串.小P任意截取一个区间s,使得这个区间 ...

  5. 1003: [ZJOI2006]物流运输 = DP+SBFA

    题意就是告诉你有n个点,e条边,m天,每天都会从起点到终点走一次最短路,但是有些点在某些时间段是不可走的,因此在某些天需要改变路径,每次改变路径的成本是K,总成本=n天运输路线长度之和+K*改变运输路 ...

  6. centos7 安装phpmyadmin

    1.先安装epel,不然安装pgpmyadmin时会出现找不到包. yum install epel-release rpm -ivh http://rpms.famillecollet.com/en ...

  7. Nagios 系统监控

    Nagios 系统监控 Nagios 是一款免费的开源 IT 基础设施监控系统,功能强大,灵活性强,能有效监控 Windows.Linux.VMware 和 Unix 主机状态,交换机.路由器等网络设 ...

  8. jmeter操作数据库

    1)     jmeter不能直接连数据库,需要先添加jar包. 然后将jar包的路径添加到下图: 2)     操作数据库之前要知道数据库的信息(ip.端口号.账号.密码),操作哪个数据库就连哪个: ...

  9. 【问题解决方案】之 hadoop 用jps命令后缺少namenode的问题

    用Xshell连接腾讯cloud里的虚拟机后,jps命令查无namenode导致过滤排序程序跑不起来,如图: 解决方案: Google之,说需要重启,格式化后再启动Hadoop.但鉴于本人不知道实现的 ...

  10. 面向对象设计的SOLID原则、迪米特法则

    SPR(The Single Responsibility Principle):单一责任原则 OCP(The Open Closed Principle):开放封闭原则 LSP(The Liskov ...