2019 ICPC Asia Nanchang Regional E Eating Plan 离散化+前缀和
题意:
给你n个盘子,这n个盘子里面分别装着1!到n!重量的食物,对于每一个询问k,找出一个最短的区间,使得区间和 mod 998857459 大于或等于k
盘子数量 n<=1e5 询问次数 m<=1e4
题解:
坑点在于此题模数998857459=4*773*2803 是个合数,因此任何a>=2803 a!=0
因此,只需考虑非0的盘子作为端点,暴力枚举$(max(n,2802))^2$个区间。
我使用的方式是记录阶乘取模非0节点的值和位置,然后求前缀和
再枚举左右端点,记录区间和取模和区间长度
再将区间按照区间和从小到大排序
再把值从小到大的区间从后往前,维护取得大于等于该值所需区间长度的最小值。
询问时在排好序的区间数组上lower_bound,返回该点记录的最小区间长度.
#include<iostream>
#include<algorithm>
#include<vector>
#define MOD 998857459
#define INF 0x3f3f3f3f
using namespace std;
long long poww[];
long long res[];
//long long a[100005];
struct Array{
long long val;
long long index;
long long sum;
}a[];
long long asiz=;
struct Ans{
long long sum;
long long len;
long long minlen; friend bool operator < (const Ans &a,const Ans &b){
return a.sum<b.sum;
}
friend bool operator > (const Ans &a,const Ans &b){
return a.sum>b.sum;
}
}ans[];
long long anssiz=;
//vector<Ans> ans;
int main(){
poww[]=;
for(long long i=;i<=;i++){
poww[i]=1LL*poww[i-]*i%MOD;
//printf("%lld\n",poww[i]);
} long long n,m;
scanf("%lld %lld",&n,&m); for(long long i=;i<=n;i++){
long long t;
scanf("%lld",&t);
if(t<=){
asiz++;
a[asiz].index=i;
a[asiz].val=poww[t];
}
} //a[1].sum=a[1].val;
for(long long i=;i<=asiz;i++){
a[i].sum=a[i-].sum+a[i].val;
} //memset(res,INF,sizeof res);
for(long long i=;i<=asiz;i++){
for(long long j=i;j<=asiz;j++){
//ans.push_back(aa);
anssiz++;
ans[anssiz].len=a[j].index-a[i].index+;
ans[anssiz].sum=(a[j].sum-a[i-].sum)%MOD;
//res[j-i+1]=max(res[j-i+1],a[j].sum-a[i-1].sum);
}
} sort(ans+,ans++anssiz); ans[anssiz].minlen=ans[anssiz].len; for(long long i=anssiz-;i>=;i--){
ans[i].minlen=min(ans[i+].minlen,ans[i].len);
//printf("*%lld %lld\n",ans[i].sum,ans[i].minlen);
}
//for(int i=1;i<=anssiz;i++){
//printf("*%lld %lld %lld\n",ans[i].sum,ans[i].len,ans[i].minlen);
//}
for(long long i=;i<=m;i++){
long long k;
scanf("%lld",&k);
Ans tmp;
tmp.sum=k;
long long aa=lower_bound(ans+,ans++anssiz,tmp)-ans;
//printf("%lld\n",aa);
if(aa==anssiz+)printf("-1\n");
else printf("%lld\n",ans[aa].minlen);
}
return ;
}
2019 ICPC Asia Nanchang Regional E Eating Plan 离散化+前缀和的更多相关文章
- 2019 ICPC Asia Nanchang Regional C And and Pair 找规律/位运算/dp
题意: 给定一个二进制表示的n,让你找满足如下要求的数对(i,j)的个数 $0 \leqslant j \leqslant i \leqslant n$ $ i & n = i $ $ i & ...
- 2019 ICPC Asia Nanjing Regional
2019 ICPC Asia Nanjing Regional A - Hard Problem 计蒜客 - 42395 若 n = 10,可以先取:6,7,8,9,10.然后随便从1,2,3,4,5 ...
- 2019 ICPC Asia Nanjing Regional K. Triangle
题目:在直角坐标系中给定 p1,p2,p3构成三角形,给定p4可能在三角形边上也可能不在, 问能不能在三角形上找出p5,使得线段p4p5,平分三角形(p4必须在三角形上).不能则输出-1. 思路:四个 ...
- 2019 ICPC Asia Xuzhou Regional
目录 Contest Info Solutions A. Cat B. Cats line up C. <3 numbers E. Multiply F. The Answer to the U ...
- 2019 ICPC Asia Yinchuan Regional
目录 Contest Info Solutions A. Girls Band Party B. So Easy D. Easy Problem E. XOR Tree F. Function! G. ...
- The 2019 ICPC Asia Shanghai Regional Contest H Tree Partition k、Color Graph
H题意: 给你一个n个节点n-1条无向边构成的树,每一个节点有一个权值wi,你需要把这棵树划分成k个子树,每一个子树的权值是这棵子树上所有节点权值之和. 你要输出这k棵子树的权值中那个最大的.你需要让 ...
- 2019 ICPC Asia Taipei-Hsinchu Regional Problem J Automatic Control Machine (DFS,bitset)
题意:给你\(m\)个长度为\(n\)的二进制数,求最少选多少个使它们\(|\)运算后所有位置均为\(1\),如果不满足条件,则输出\(-1\). 题解:这题\(n\)的范围很大,所以我们先用\(st ...
- 2019 ICPC Asia Taipei-Hsinchu Regional Problem K Length of Bundle Rope (贪心,优先队列)
题意:有\(n\)堆物品,每次可以将两堆捆成一堆,新堆长度等于两个之和,每次消耗两个堆长度之和的长度,求最小消耗使所有物品捆成一堆. 题解:贪心的话,每次选两个长度最小的来捆,这样的消耗一定是最小的, ...
- 2018 ICPC Asia Singapore Regional A. Largest Triangle (计算几何)
题目链接:Kattis - largesttriangle Description Given \(N\) points on a \(2\)-dimensional space, determine ...
随机推荐
- PHP抓取远程图片到本地保存(如何把错误信息用text文件写入)
最近在工作中需要开发了一个用户素材功能,里面需要将网上的各种图片素材进行本地化存储.于是在网上找了一些相关资料,并根据自身开发需要,整理了一下主要的逻辑代码. /** * PHP将网页上的图片攫取到本 ...
- JS - 模块
# CommonJS - [CommonJS - Wikipedia](https://en.wikipedia.org/wiki/CommonJS) ## 介绍 主要在浏览器之外地方(例如服务器和桌 ...
- jmeter添加自定义扩展函数之DoubleSum
1,打开eclipse,新建maven工程,在pom中引用jmeter核心jar包,具体请看---https://www.cnblogs.com/guanyf/p/10863033.html---,这 ...
- VSphere随笔 - vCenter6.5安装报错 “Failed to authenticate with the guest operating system using the supplied“
今天重新安装VCSA,安装多次一直卡在80%的画面不动,显示正在安装RPM包,同时log日志显示“Failed to authenticate with the guest operating sys ...
- [python面试题] 什么是单例,单例有什么用,业务场景是什么
单例概念: 单例是一个特殊的类,这个类只能创建一次实例,例子如下: 1.a = Std(name='leo'), b = Std(name='jack'),两者的指向都是name=‘leo’的对象: ...
- haskell目录层次
daniel@daniel-mint /usr/lib/ghc/haskell2010-1.1.1.0 $ tree . ├── Control │ └── Monad.hi ├── Data │ ...
- HTML页面隐藏值
<input id="menuId" type="hidden" hidden="hidden" />
- SSH服务搭建、账号密码登录远程Linux虚拟机、基于密钥的安全验证(Windows_Xshell,Linux)
问题1:如果是两台虚拟机ping不同且其中一个虚拟机是克隆的另一个,需要更改一下MAC地址,关机状态下 一> "编辑虚拟机设置" 一>" 网络适配器" ...
- 59.Target Sum(目标和)
Level: Medium 题目描述: You are given a list of non-negative integers, a1, a2, ..., an, and a target, ...
- js中的script标签属性
HTML <script> 元素用于嵌入或引用可执行脚本. 在html中插入一个script标签 <script src="index.js" sync cros ...