[NOIP2016普及组]魔法阵
题目:洛谷P2119、Vijos P2012、codevs5624。
题目大意:有n件物品,每件物品有个魔法值。要求组成魔法阵(Xa,Xb,Xc,Xd),该魔法阵要满足Xa<Xb<Xc<Xd,Xb-Xa=2(Xd-Xc),并且Xb-Xa<(Xc-Xb)/3。求每件物品作为a、b、c、d的次数。
解题思路:这真是一道锻炼思(bào)维(lì)能力的好(kēng)题!
首先枚举魔法阵的每件物品,姿势好可得65(洛谷测)。
然后是强(wěi)大(suǒ)的正解。
首先利用桶排的思路保存各个魔法值。
设Xd-Xc=t,则根据一系列推论可得:
Xb-Xa=2t
Xc-Xb>6t
那么首先想到的就是枚举t,然后再枚举c、b,算出a、d,最后一交发现还是超时几个点!!是不是气的想砸电脑了?
别急慢慢来。首先我们可以发现,t的枚举范围在1~n/9中即可。
然后我们令d取满足条件的最小值(9t+2),a就只能取1(b可以根据a推出,不用考虑),那么如果d增加1,a就能选1、2,d增加2,a能取1、2、3……
那么我们用一个sum记录当前a、b共有多少种选法,然后计算c、d,就不用再次枚举了。
同理a、b取最大值,然后如此计算即可。
满分拿到,感觉比网络流还难!!!
C++ Code:
#include<cstdio>
#include<cctype>
using namespace std;
int n,m,cnt[15999]={0};
int A[15999]={0},B[15999]={0},C[15999]={0},D[15999]={0},f[40004];
inline int readint(){
char c=getchar();
int p=0;
for(;!isdigit(c);c=getchar());
for(;isdigit(c);c=getchar())p=(p<<3)+(p<<1)+(c^'0');
return p;
}
int main(){
m=readint(),n=readint();
for(int i=1;i<=n;++i){
f[i]=readint();
++cnt[f[i]];
}
for(int t=1;9*t<=m;++t){
int sum=0;
for(int d=t*9+2;d<=m;++d){
int c=d-t,b=d-7*t-1,a=d-9*t-1;
sum+=cnt[a]*cnt[b];
C[c]+=cnt[d]*sum;
D[d]+=cnt[c]*sum;
}
sum=0;
for(int a=m-t*9-1;a>=1;--a){
int b=a+2*t,c=a+8*t+1,d=a+9*t+1;
sum+=cnt[c]*cnt[d];
A[a]+=cnt[b]*sum;
B[b]+=cnt[a]*sum;
}
}
for(int i=1;i<=n;++i)printf("%d %d %d %d\n",A[f[i]],B[f[i]],C[f[i]],D[f[i]]);
return 0;
}
[NOIP2016普及组]魔法阵的更多相关文章
- 【做题记录】[NOIP2016 普及组] 魔法阵
P2119 魔法阵 2016年普及组T4 题意: 给定一系列元素 \(\{X_i\}\) ,求满足以下不等式的每一个元素作为 \(a,b,c,d\) 的出现次数 . \[\begin{cases}X_ ...
- NOIP2016普及组解题报告
概述 \(NOIP2016\)普及组的前三题都比较简单,第四题也有很多的暴力分,相信参加了的各位\(OIer\)在\(2016\)年都取得了很好的成绩. 那么,我将会分析\(NOIP2016\)普及组 ...
- NOIP2016普及组
普及组.代码有空发. 第一题就是买铅笔.暴力模拟绝对可取. 第二题就是回文日期.从t1的年份到t2的年份枚举每一年.头尾要特判. 第三题就是海港.骗了40分. 第四题就是魔法阵.不太好优化. 完.
- NOIP2016普及组复赛解题报告
提高组萌新,DAY1DAY2加起来骗分不到300,写写普及组的题目聊以自慰. (附:洛谷题目链接 T1:https://www.luogu.org/problem/show?pid=1909 T2:h ...
- [题解]noip2016普及组题解和心得
[前言] 感觉稍微有些滑稽吧,毕竟每次练的题都是提高组难度的,结果最后的主要任务是普及组抱一个一等奖回来.至于我的分数嘛..还是在你看完题解后写在[后记]里面.废话不多说,开始题解. 第一题可以说的内 ...
- noip2016普及组题解和心得
前言 感觉稍微有些滑稽吧,毕竟每次练的题都是提高组难度的,结果最后的主要任务是普及组抱一个一等奖回来.至于我的分数嘛..还是在你看完题解后写在[后记]里面.废话不多说,开始题解. (其实这篇博客只有题 ...
- 【NOIP2016普及组复赛】魔法阵
题目 分析 设xd-xc为i,那么xb-xa=2i, 又因为xb-xa<(xc-xb)/3, 那么c>6i+b. 于是,先枚举i, 再分别枚举xa和xd, 根据之间的关系,用前缀和求出每一 ...
- noip2016普及组 题解
T1 大水题,不解释 上考场代码 #include <algorithm> #include <cstdio> using namespace std; int main() ...
- noip2016 普及组
T1 买铅笔 题目传送门 #include<cstdio> #include<cstring> #include<algorithm> using namespac ...
随机推荐
- 20.boost dijkstra最短路径算法
到某个点的最短距离 到终点的最短路径 完整代码 #include <iostream> #include <string> #include &l ...
- Kettle的概念学习系列之Kettle是什么?(一)
不多说,直接上干货! Kettle是什么? Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,绿色无需安装,数据抽取高效稳定. Kettle 中文 ...
- Collections库使用
Date: 2019-05-27 Author: Sun Collections库 Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collec ...
- tab栏切换
最简单的tab栏切换 html部分 <ul class="tab"> <li class="item">待支付(1)</li> ...
- perl脚本去除文件中重复数据
今天第一天写博客,写的不好请大家多多指教,废话不多说了,干货送上: ############################################################# #!/u ...
- BZOJ 3881 [Coci2015]Divljak(AC自动机+树状数组)
建立AC自动机然后,加入一个串之后考虑这个串的贡献.我们把这个串扔到AC自动机里面跑.最后对经过每一个点到的这个点在fail树的根的路径上的点有1的贡献.求链的并,我们把这些点按DFS序排序,然后把每 ...
- Django模版系统
一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django 模板中遍历复杂数据结构的关键 ...
- 2019年北航OO第一单元(表达式求导任务)总结
2019面向对象课设第一单元总结 一.三次作业总结 1. 第一次作业 1.1 需求分析 第一次作业的需求是完成简单多项式导函数的求解,表达式中每一项均为简单的常数乘以幂函数形式,优化目标为最短输出.为 ...
- 2016 10 27 考试 dp 向量 乱搞
目录 20161027考试 T1: T2: T3: 20161027考试 考试时间 7:50 AM to 11:15 AM 题目 考试包 据说这是一套比较正常的考卷,,,嗯,,或许吧, 而且,,整个小 ...
- hdoj 1429 胜利大逃亡(续) 【BFS+状态压缩】
题目:pid=1429">hdoj 1429 胜利大逃亡(续) 同样题目: 题意:中文的,自己看 分析:题目是求最少的逃亡时间.确定用BFS 这个题目的难点在于有几个锁对于几把钥匙.唯 ...