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 ...
随机推荐
- 秋风下的萧瑟 NOIP2018 游记
“北方的秋天还真的是美丽冻人呢!” 是么?我有些疑惑,任凭雨滴落在脸上. 这天,可真不好,秋雨可让这天气一天比一天的寒冷了. 大概,故事从这里开始吧? 上一次的故事说道了哪里?那么,我们从今天的新故事 ...
- javaee_SSH
这是javaee课程的第六个实验ssh sturts2+sping 3+hibernate 现予以记录整个过程,以防遗忘 1. 2. 3. 4. 5.输入mvnrepository.com进入-> ...
- SAP函数 LAST_DAY_OF_MONTHS 获取月末最后一天日期
DATA LAST_DATE TYPE SY-DATUM. CALL FUNCTION 'LAST_DAY_OF_MONTHS' EXPORTING day_in = sy-datum IMPORTI ...
- 20155310 《网络对抗》Exp 8 Web基础
20155310 <网络对抗>Exp 8 Web基础 基础问题回答 (1)什么是表单 表单是一个包含表单元素的区域. 表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选框等等 ...
- Kubernetes学习之路目录
Kubernetes基础篇 环境说明 版本说明 系统环境 Centos 7.2 Kubernetes版本 v1.11.2 Docker版本 v18.09 Kubernetes学习之路(一)之概念和架构 ...
- Java和C#基本类库的区别
java.lang java .net Boolean System.Boolean Byte System. Byte Character System.Char Class System.Type ...
- 【2017年9月10日更新】ABP配套代码生成器(ABP Code Generator)帮助文档,实现快速开发
ABP代码生成器介绍 ABP Code Generator 针对abp这个框架做了一个代码生成器,功能强大.分为两大功能点,一个是数据层,一个是视图层. 数据服务层:通过它,可以实现表设计.领域层初始 ...
- 阿里云ESC入网和出网指的什么
什么是入网带宽和出网带宽 云服务器 ECS 的入网带宽和出网带宽皆以服务器角度出发.下表给出了入网带宽和出网带宽的具体内容: 带宽类别 (Mbit/s) 描述 入网带宽 流入云服务器 ECS 的带宽从 ...
- Altium CAED 国际认证操作题例题(含下载)
官网介绍页面 https://www.altium.com.cn/certification 共五套操作题 含资料 蓝奏云:https://www.lanzous.com/i2lj1ng 百度网盘:h ...
- win10安装tensorflow-gpu
1.安装anaconda (最好使用清华源下载) 2.打开cmd conda create -n tensorflow pip python=3.6 activate tensorflow pip i ...