bzoj5月月赛订正
已完成2/9(要准备中考啊QwQ)
T1
考虑对所有数分解质因数,其中因子>sqrt(100000)的因子最多有一个,于是我们可以暴力维护<sqrt(100000)的因子个数的前缀和。
剩下的就是判区间里一个数出现的次数。我写了主席树。。。
code
#include <bits/stdc++.h>
using namespace std;
int tot,i,j,k,n,m,x,y,t,cas,prime1[],prime2[],b[],num1[],num2[],tt,c[],s[][];
inline int read(){
int x=,f=;
char ch=getchar();
while (ch<''||ch>''){f=ch=='-'?-f:f;ch=getchar();}
while (ch>=''&&ch<=''){x=x*+ch-;ch=getchar();}
return x*f;
}
inline void pre(){
tot=;
for (register int i=;i<=;i++)
if (!b[i]){
b[i]=;prime2[i]=++tot;
if (i<)prime1[tot]=i,tt=tot;
for (register int j=i;j<=;j+=i)b[j]=;
}
}
int rt[],l[],r[],size[],num;
inline void Build(int &rt,int L,int R){if (!rt)rt=++num;if (L==R)return;Build(l[rt],L,L+R>>);Build(r[rt],(L+R>>)+,R);}
inline void Insert(int &rt,int la,int L,int R,int v){
if (!rt)rt=++num;
if (L==R){size[rt]=size[la]+;return;}
l[rt]=l[la];r[rt]=r[la];
int mid=L+R>>;
if (v<=mid){l[rt]=;Insert(l[rt],l[la],L,mid,v);}else {r[rt]=;Insert(r[rt],r[la],mid+,R,v);}
}
inline int calc(int rt,int L,int R,int x){
if (!rt)return ;
if (L==R)return size[rt];int mid=L+R>>;
if (x<=mid)return calc(l[rt],L,mid,x);else return calc(r[rt],mid+,R,x);
}
int V[];
int main(){
cas=read();pre();
while (cas--){
n=read();m=read();
for (register int i=;i<=n;i++){
x=read();y=x;V[i]=x;
for (register int j=;j<=tt;j++)s[i][j]=s[i-][j];
for (register int j=;j<=tt;j++){while (x%prime1[j]==)s[i][j]++,x/=prime1[j];if (x==)break;}
c[i]=x;
}
memset(rt,,sizeof rt);
memset(l,,sizeof l);
memset(r,,sizeof r);
memset(size,,sizeof size);
num=;Build(rt[],,tot);
for (register int i=;i<=n;i++)Insert(rt[i],rt[i-],,tot,prime2[c[i]]);
while (m--){
int L=read(),R=read();x=read();
memset(num1,,sizeof num1);
memset(num2,,sizeof num2);
for (register int j=;j<=tt;j++){while (x%prime1[j]==)x/=prime1[j],num2[j]++;if (x==)break;}
for (register int j=;j<=tt;j++)num1[j]=s[R][j]-s[L-][j];
bool bo=;
for (register int j=;j<=tt;j++)if (num1[j]<num2[j]){puts("No");bo=;break;}
if (!bo)continue;
if (x==){puts("Yes");continue;}
if (calc(rt[R],,tot,prime2[x])-calc(rt[L-],,tot,prime2[x])<)puts("No");else puts("Yes");
}
}
return ;
}
T1
T2
考虑DP,f[i][j][x][y]表示走到i,j,并且路径上有x个没选,并在前i-1行以及第i行前j-1个里选了y个的最优值。ans显然等于max(f[n][m][i][i])0<=i<=t
然后转移。
f[i][j][x][y]可以直接转移到f[i][j+1][x][y]以及f[i][j+1][x+1][y](i,j+1不选)
再考虑往下转移,(i+1,j)也可以选或不选,然后,再在(i,j+1)~(i,m)以及(i+1,1)~(i+1,j-1)中选最大的k个,转移给f[i+1][j][x+(1 or 0)][y+k]
code
#pragma GCC optimize(2)
#include <bits/stdc++.h>
#define RI register int
using namespace std;
typedef long long ll;
int i,j,k,n,m,x,y,t,T,b[][][];
ll f[][][][],a[][];
int read(){
int x=,f=;
char ch=getchar();
while (ch<''||ch>''){f=ch=='-'?-f:f;ch=getchar();}
while (ch>=''&&ch<=''){x=x*+ch-;ch=getchar();}
return x*f;
}
inline int max(int x,int y){return x>y?x:y;}
int main(){
T=read();
while (T--){
n=read();m=read();x=read();
for (RI i=;i<=n;i++)for (RI j=;j<=m;j++)scanf("%lld",&a[i][j]);;
memset(b,,sizeof b);
for (RI i=;i<n;i++)
for (RI j=;j<=m;j++){
for (RI k=j+;k<=m;k++)b[i][j][++b[i][j][]]=a[i][k];
for (RI k=;k<j;k++)b[i][j][++b[i][j][]]=a[i+][k];
sort(b[i][j]+,b[i][j]++b[i][j][]);
}
memset(f,-,sizeof f);
f[][][][]=a[][];f[][][][]=;
for (RI i=;i<=n;i++)
for (RI j=;j<=m;j++)
for (RI k=;k<=x;k++)
for (RI t=;t<=x;t++)
if (f[i][j][k][t]>-){
if (j<=m){
f[i][j+][k][t]=max(f[i][j+][k][t],f[i][j][k][t]+a[i][j+]);
if (k<x)f[i][j+][k+][t]=max(f[i][j+][k+][t],f[i][j][k][t]);
}
if (i<n){
ll p=;
for (RI h1=;h1+t<=x;h1++){
p+=b[i][j][b[i][j][]-h1+];
f[i+][j][k][t+h1]=max(f[i+][j][k][t+h1],f[i][j][k][t]+p+a[i+][j]);
if (k<x){f[i+][j][k+][t+h1]=max(f[i+][j][k+][t+h1],f[i][j][k][t]+p);}
}
}
}
ll ans=;for (RI i=;i<=x;i++)ans=max(ans,f[n][m][i][i]);
printf("%lld\n",ans);
}
return ;
}
T2
bzoj5月月赛订正的更多相关文章
- BZOJ Lydsy5月月赛 ADG题解
题目链接 BZOJ5月月赛 题解 好弱啊QAQ只写出三题 A 判断多干个数乘积是否是某个数的倍数有很多方法,比较常用的是取模,但这里并不适用,因为模数不定 会发现数都比较小,所以我们可以考虑分解质因子 ...
- [补档][Lydsy2017年4月月赛]抵制克苏恩
[Lydsy2017年4月月赛]抵制克苏恩 题目 小Q同学现在沉迷炉石传说不能自拔.他发现一张名为克苏恩的牌很不公平. 如果你不玩炉石传说,不必担心,小Q同学会告诉你所有相关的细节.炉石传说是这样的一 ...
- 洛谷4月月赛R2
洛谷4月月赛R2 打酱油... A.koishi的数学题 线性筛约数和就可以\(O(N)\)了... #include <iostream> #include <cstdio> ...
- 洛谷3月月赛 R1 Step! ZERO to ONE
洛谷3月月赛 R1 Step! ZERO to ONE 普及组难度 290.25/310滚粗 t1 10分的日语翻译题....太难了不会... t2 真·普及组.略 注意长为1的情况 #include ...
- 【洛谷5月月赛】玩游戏(NTT,生成函数)
[洛谷5月月赛]玩游戏(NTT,生成函数) 题面 Luogu 题解 看一下要求的是什么东西 \((a_x+b_y)^i\)的期望.期望显然是所有答案和的平均数. 所以求出所有的答案就在乘一个逆元就好了 ...
- BZOJ5091 摘苹果 BZOJ2017年11月月赛 概率,期望
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5091 11月月赛B题 题意概括 题解 代码 #include <cstring> #i ...
- BZOJ5090 组题 BZOJ2017年11月月赛 二分答案 单调队列
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5090 11月月赛A题 题意概括 给出n个数. 求连续区间(长度大于等于k)最大平均值. 题解 这题 ...
- 洛谷P3862 8月月赛B
https://www.luogu.org/problemnew/show/P3862#sub P3862 8月月赛B 推公式:f(n)->f(n+1) 奇葩的预处理 https://www.l ...
- 【BZOJ 4832 】 4832: [Lydsy2017年4月月赛]抵制克苏恩 (期望DP)
4832: [Lydsy2017年4月月赛]抵制克苏恩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 275 Solved: 87 Descripti ...
随机推荐
- 一条insert语句插入数据库
CREATE TABLE test_main ( id INT NOT NULL, value VARCHAR(10), PRIMARY KEY(id) ); oracle插入方式:INSERT IN ...
- 记录 第一次体验安装python第三方库的全过程
目的:安装 Pillow库 现状是:python是3.4,easy_install没有安装:pip没有安装, 步骤: 1.安装Pillow库需要安装pip 2.安装pip需要安装easy_instal ...
- 在 JS 对象中使用 . 和 [] 操作属性的区别
在 JS 对象中,调用属性一般有两种方法--点和中括号的方法. 例如 使用点方法 var obj = { name: "cedric" } console.log(obj.name ...
- servelt filter listener 的生命周期
1. servlet 当第一次请求一个servlet资源时,servlet容器创建这个servlet实例,并调用他的 init(ServletConfig config)做一些初始化的工作,然后 ...
- 高精度加法--C++
高精度加法--C++ 仿照竖式加法,在第一步计算的时候将进位保留,第一步计算完再处理进位.(见代码注释) 和乘法是类似的. #include <iostream> #include < ...
- LAYOUT 注意点
1:CLK时钟GND全包,可以适当调整布局使包地完整. 2:WIFI天线下层均净空GND 3:过孔尽量不打在焊盘上或距离焊盘太近容易漏锡
- 华为云对Kubernetes在Serverless Container产品落地中的实践经验
华为云容器实例服务,它基于 Kubernetes 打造,对最终用户直接提供 K8S 的 API.正如前面所说,它最大的优点是用户可以围绕 K8S 直接定义运行应用. 这里值得一提是,我们采用了全物理机 ...
- yocto-sumo源码解析(二): oe-buildenv-internal
1 首先,脚本先对运行方式进行了检测: if ! $(return >/dev/null 2>&1) ; then echo 'oe-buildenv-internal: erro ...
- 新手向:从不同的角度来详细分析Redis
最近对华为云分布式缓存产品Redis做了一些研究,于是整理了一些基本的知识拿出来与大家分享,首先跟大家分享的是,如何从不同的角度来详细使用Redis. 小编将从以下9个角度来进行详细分析,希望可以帮到 ...
- LAXCUS大数据操作系统节点挂掉后的处理
昨天回公司加班跑一个LAXCUS大数据应用,JVM直接挂了,没有留下任何异常信息,查看代码,也没有内存泄漏的问题.百思不得姐,只好去求教LAXCUS大数据操作系统的技术客服,客服查看了故障节点配置.日 ...