jzoj6384. 【NOIP2019模拟2019.10.23】珂学家
Description
Input
Output
输出共 行,每行一个非负整数表示答案。
Sample Input
2 1
1 2 3
2 1 3
5
Sample Output
4
只能选用试剂1 和试剂2 配饮料。有两种配法,用量分别为2,3 和3,2 ,每种配法的可口度为2 ,所以答案为4 。
Data Constraint
赛时
一开始想到一个用两个堆来维护的做法。
突然发现好像带个log过不去。
画画柿子突然发现可以差分。
草草打完,用了2个钟。
最后还T了。
题解
考虑差分。
首先,枚举每一种选择情况,一共n2n^2n2种。
然后对于每一种我们讨论其系数。
大概是长这样的:
因此,我们只需要考虑分成三段来差分。
首先第递增的,然后是相等的,最后是递减的。
直接差分后做两遍前缀和即可。
注意常数,要稍微优化一下。
标程
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const long long mo=998244353;
const int maxn=5010;
const int maxm=500010;
const int farr=20000010;int n,m,tot;
long long a[maxn],l[maxn],r[maxn],q[maxm],sum[farr],ans[maxm];
long long val[maxn*maxn/2],zx[maxn*maxn/2],zd[maxn*maxn/2];__attribute__((optimize("-O3")))
int main()
{freopen("a.in","r",stdin);freopen("a.out","w",stdout);scanf("%d%d",&n,&m);for (int i=1;i<=n;i++){scanf("%lld%lld%lld",&a[i],&l[i],&r[i]);}int gs=0;for (int i=1;i<=n;i++){for (int j=i+1;j<=n;j++){gs++;val[gs]=a[i]*a[j]%mo;zx[gs]=l[i]+l[j];zd[gs]=r[i]+r[j];int mid=(zx[gs]+zd[gs])/2;int yd=(mid-zx[gs]+1)-min(r[i]-l[i]+1,r[j]-l[j]+1);if ((zd[gs]-zx[gs]+1)%2==1){sum[zx[gs]]=sum[zx[gs]]+val[gs];if (sum[zx[gs]]>10000000000000000) sum[zx[gs]]%=mo;sum[mid+1-yd]=(sum[mid+1-yd]-val[gs]+mo);if (sum[mid+1-yd]>10000000000000000) sum[mid+1-yd]%=mo;sum[mid+1+yd]=(sum[mid+1+yd]-val[gs]+mo);if (sum[mid+1+yd]>10000000000000000) sum[mid+1+yd]%=mo;sum[zd[gs]+2]=(sum[zd[gs]+2]+val[gs]);if (sum[zd[gs]+2]>10000000000000000) sum[zd[gs]+2]%=mo;}else{sum[zx[gs]]=sum[zx[gs]]+val[gs];if (sum[zx[gs]]>10000000000000000) sum[zx[gs]]%=mo;sum[mid+1-yd]=(sum[mid+1-yd]-val[gs]+mo);if (sum[mid+1-yd]>10000000000000000) sum[mid+1-yd]%=mo;sum[mid+2+yd]=(sum[mid+2+yd]-val[gs]+mo);if (sum[mid+2+yd]>10000000000000000) sum[mid+2+yd]%=mo;sum[zd[gs]+2]=(sum[zd[gs]+2]+val[gs]);if (sum[zd[gs]+2]>10000000000000000) sum[zd[gs]+2]%=mo;}}}for (int i=1;i<=farr-1;i++){sum[i]=(sum[i-1]+sum[i]+mo)%mo;}for (int i=1;i<=farr-1;i++){ans[i]=(ans[i-1]+sum[i]+mo)%mo;}for (int i=1;i<=m;i++){scanf("%lld",&q[i]);}for (int i=1;i<=m;i++){printf("%lld\n",ans[q[i]]);}
}
jzoj6384. 【NOIP2019模拟2019.10.23】珂学家相关推荐
- JZOJ6384【NOIP2019模拟2019.10.23】珂学家
珂学家 题目描述: 输入: 输出: 输出共mmm行,每行一个非负整数表示答案. 这道题看到是一个区间,便想到了数据结构之类的东西. 但是呢它好像不带修.所以初步判断这是个离线的题目. 再仔细观察发现, ...
- 6377. 【NOIP2019模拟2019.10.05】幽曲[埋骨于弘川]
题目 题目大意 有个无限长的数列an{a_n}an,a1=1a_1=1a1=1,an=an−1+maxdightk(an−1)a_n=a_{n-1}+maxdight_k(a_{n-1})an= ...
- 6374. 【NOIP2019模拟2019.10.04】结界[生与死的境界]
题目 题目大意 给你一个数列,每次可以选择任意两个相邻的数xxx和yyy,将其删去,并在原来位置插入x+2yx+2yx+2y. 每次询问一个区间,对这个区间进行上述操作.求最后剩下的数最大是多少. 答 ...
- jzoj6377. 【NOIP2019模拟2019.10.05】幽曲[埋骨于弘川]
题解 真的都快忘了. 首先,我们考虑排序,求出一个神奇的排列方式,也就是dfn序. 那么答案必定是在dfn序里面一些连续的段连接起来. 然后我们就判断这玩意儿是否满足在a里面出现过. 于是现在分两步走 ...
- 6360. 【NOIP2019模拟2019.9.18】最大菱形和(rhombus)
Description Input Output Sample Input 5 5 2 0 1 5 7 3 -4 2 0 -9 8 3 9 0 7 8 2 -4 5 -7 1 4 5 8 7 0 6 ...
- JZOJ6362. 【NOIP2019模拟2019.9.18】数星星(star)
Description Solution 考虑分治,将每一个询问挂在包括它的最大的区间中. 只考虑中点往右的区间的贡献,那么每一个点对于覆盖它的最早的时间有一个贡献. 我们建一个虚树,并且用并查集路径 ...
- 第二代机器人操作系统课程资料汇总 Course Learning Materials for ROS2 2019.10.23
ROS2全部课程资料专栏:https://blog.csdn.net/zhangrelay/article/category/9327597 ROS2开发最新动态资讯:https://blog.csd ...
- 【JZOJ 6079】【GDOI2019模拟2019.3.23】染色问题
Description m≤n+5,k,n≤105m\leq n+5,k,n\leq10^5m≤n+5,k,n≤105 Solution 1 这个图只有5条返祖边所以才能做, 先把所有有返祖边的点拿出 ...
- (每日一读2019.10.23)低漂移、鲁棒和快速的视觉-激光里程计和建图(VLoam)
参考:https://www.jianshu.com/p/cb7098567711 论文:pdf 摘要 本文开发了一个低成本的立体视觉惯性定位系统,该系统利用有效的基于多状态约束卡尔曼滤波(MSCKF ...
最新文章
- python3远程连接MySQL
- VBS脚本和HTML DOM自动操作网页
- 简单算法题:leetcode-2 	两数相加
- ios逆向小试牛刀之操作手记
- java enummap_Java EnumMap get()方法与示例
- NOIP 2007 普及组初赛试题(C++)(无答案)
- c++ 项不会计算为接受 0 个参数的函数_OFFSET函数从入门到进阶之进阶操作篇(与MATCH组合)...
- mapreduce实现矩阵相乘
- 论文A Tutorial on Graph-Based SLAM 学习笔记
- 耳机插在电脑上没声音linux,解决linux上耳机没有声音
- 这个图像工具箱,让我找得好苦
- 淘宝按图搜索商品(拍立淘)、图片上传API接口、图片识别商品接口img2text标题栏、链接及图片相关参数字段API数据获取调用示例
- 用g++编译cpp文件
- 遍历出List<Map>的Key / Value
- 嵌入式——Linux 学习之路(二):Docker
- 月结重头戏--外币评估
- rhombus(菱形)
- 智禾教育:现在入局电商行业算晚吗,行业前景将会如何发展
- Angular2组件开发—模板的逻辑控制(一)
- 计算机桌面图标乱码,教您软件乱码怎么修复