NOIP模拟测试13
考得还算可以,T3还有提升空间(没看清题&&样例没过 拿了4分)。
期望得分:80+40+0=120
实际得分:80+85+4=169
一脸黑线。。。。。是数据比较水的原因,T2分都比较高
反正先把暴力分拿满就对了。
T1 矩阵游戏
水题吗?我觉得不是,n,m 1e9! 23333不过好像沿用二营长的思路也可以过,总而言之是我太菜了,菜是原罪嘛。
首先易推出式子 ans=ΣH[i]*ΣL[j]*(m*(i-1)+j) (1<=i<=n,1<=j<=m)
考虑展开化简 ans=ΣH[i]*ΣL[j]*m*(i-1)+L[j]*j
发现ΣL[j]*j可以处理出来
而ΣL[j]*m*(i-1)可以递推出来
然后就。。。AC了
#include<bits/stdc++.h>
#define MAXN 1000005
#define int long long
using namespace std;
const int mod=;
int h[MAXN],l[MAXN];
signed main()
{
int n,m,k,tot=,base=,now=,ans=;
scanf("%lld%lld%lld",&n,&m,&k);
for(int i=;i<=n;i++)h[i]=;
for(int i=;i<=m;i++)l[i]=;
while(k--)
{
char opt;cin>>opt;
int x,y;
scanf("%lld%lld",&x,&y);
if(opt=='R')(h[x]*=y)%=mod;
else (l[x]*=y)%=mod;
}
for(int i=;i<=m;i++)(tot+=l[i]*i)%=mod,(base+=l[i])%=mod;
for(int i=;i<=n;i++)
{
(ans+=h[i]*(now+tot)%mod)%=mod;
(now+=base*m)%=mod;
}
cout<<ans<<endl;
return ;
}
AC代码
T2 跳房子
我还没A,85分暴力很不错。
主要是如何优化模拟blablabla
T3 优美序列
ST表可以维护权值,分块是优化的极好方式。
看题目的时候一定要认真。
这个题首先可以用ST表维护,即对于当前区间求出最大最小值,在利用维护的权值ST表搞出目标位置,利用目标位置更新当前max和min
但这种做法会被卡,可以用分块优化。
引理:
对于一个区间R,它的子区间的最优答案一定是它的最优答案的子区间。
利用这个我们可以先分块,(设块数为k)再处理出这k^2个块之间的答案,跑的飞快。
#include<bits/stdc++.h>
#define MAXN 100005
#define min(a,b) ((a<b)?(a):(b))
#define max(a,b) ((a>b)?(a):(b))
using namespace std;
int mn[][MAXN],mx[][MAXN],mh[MAXN],a[MAXN],n,mnpos[][MAXN],mxpos[][MAXN],ans1[][],ans2[][],t;
int bl[MAXN];
vector<int>ld;
void pre()
{
for(int i=;i<=n;i++)
for(int j=;j>=;j--)
if(i>=(<<j))
{
mh[i]=j;
break;
}
for(int i=;i<=;++i)
for(int j=;j<=n;++j)
{
mn[i][j]=min(mn[i-][j],mn[i-][j+(<<(i-))]);
mx[i][j]=max(mx[i-][j],mx[i-][j+(<<(i-))]);
mnpos[i][j]=min(mnpos[i-][j],mnpos[i-][j+(<<(i-))]);
mxpos[i][j]=max(mxpos[i-][j],mxpos[i-][j+(<<(i-))]);
}
return ;
}
inline int Rd()
{
int x=;char c=getchar();
while(c>''||c<'')c=getchar();
while(c>=''&&c<=''){x=x*+c-;c=getchar();}
return x;
}
inline int gmax(int l,int r)
{
return max(mx[mh[r-l+]][l],mx[mh[r-l+]][r-(<<mh[r-l+])+]);
}
inline int gmin(int l,int r)
{
return min(mn[mh[r-l+]][l],mn[mh[r-l+]][r-(<<mh[r-l+])+]);
}
inline int qmax(int l,int r)
{
return max(mxpos[mh[r-l+]][l],mxpos[mh[r-l+]][r-(<<mh[r-l+])+]);
}
inline int qmin(int l,int r)
{
return min(mnpos[mh[r-l+]][l],mnpos[mh[r-l+]][r-(<<mh[r-l+])+]);
}
int main()
{
n=Rd();
t=pow(n,0.7);
for(int i=;i<=n;i++)
{
a[i]=Rd();
mn[][i]=mx[][i]=a[i];
mnpos[][a[i]]=mxpos[][a[i]]=i;
}
int p=,tot=;
while(p<n)
{
ld.push_back(p+);
for(int i=;i<=t;i++)bl[p+i]=tot;
p+=t;
tot++;
}
pre();
memset(ans1,0x3f,sizeof(ans1));
memset(ans2,-0x3f,sizeof(ans2));
for(int i=;i<ld.size();i++)
for(int j=i;j<ld.size();j++)
{
int l,r;
l=ld[i];
r=ld[j];
int nowmin=gmin(l,r),nowmax=gmax(l,r);
int pl=qmin(nowmin,nowmax),pr=qmax(nowmin,nowmax);
while(l>pl||r<pr)
{
if(l>pl)
{
nowmin=min(nowmin,gmin(pl,l));
nowmax=max(nowmax,gmax(pl,l));
l=pl;
}
if(r<pr)
{
nowmin=min(nowmin,gmin(r,pr));
nowmax=max(nowmax,gmax(r,pr));
r=pr;
}
pl=qmin(nowmin,nowmax);pr=qmax(nowmin,nowmax);
}
ans1[i][j]=l;ans2[i][j]=r;
}
int Q;
Q=Rd();
while(Q--)
{
register int l,r,ll,rr;
l=Rd();r=Rd();
ll=bl[l]+;rr=bl[r]-;
int nowmin=gmin(l,r),nowmax=gmax(l,r);
int pl=qmin(nowmin,nowmax),pr=qmax(nowmin,nowmax);
while(l>pl||r<pr)
{
ll=bl[l]+;rr=bl[r]-;
if(l>pl)
{
nowmin=min(nowmin,gmin(pl,l));
nowmax=max(nowmax,gmax(pl,l));
l=pl;
l=min(l,ans1[ll][rr]);//答案是要动态更新,注意这句话不能写到前面,不然会出错
}
if(r<pr)
{
nowmin=min(nowmin,gmin(r,pr));
nowmax=max(nowmax,gmax(r,pr));
r=pr;
r=max(r,ans2[ll][rr]);
}
pl=qmin(nowmin,nowmax);pr=qmax(nowmin,nowmax);
}
printf("%d %d\n",l,r);
}
return ;
}
(%%%%%%znsbc)
下次加油,注重分析题目关键性质
考试要综合各种方法骗分
NOIP模拟测试13的更多相关文章
- 8.5 NOIP 模拟测试 13
今天的考试说实话T1很简单没A,我是傻X.T2T3难得一批,但是暴力的分还是拿了! 总结一下就是:骗分过样例,暴力出奇迹!只要瞎搞就行了! 话说现在终于不像之前那么傻了,终于知道打暴力了,因为之前暴力 ...
- 2019.8.5 NOIP模拟测试13 反思总结【已更新完毕】
还没改完题,先留个坑. 放一下AC了的代码,其他东西之后说… 改完了 快下课了先扔代码 跑了跑了 思路慢慢写 来补完了[x 刚刚才发现自己打错了标题 这次考试挺爆炸的XD除了T3老老实实打暴力拿了52 ...
- 8.5 NOIP模拟测试13 矩阵游戏+跳房子+优美序列
T1矩阵游戏 数学题.首先这一列这一行先乘还是后乘对最后答案没有影响.a[i][j]表示矩阵中原始的值,h[i]表示i行的累乘,l[i]表示i列的累乘.易得ans=Σa[i][j]*h[i]*l[i] ...
- NOIP模拟测试13「矩阵游戏·跳房子·优美序列」
矩阵游戏 考试时思路一度和正解一样,考试到最后还是打了80分思路,结果80分打炸了只得了40分暴力分 题解 算出来第一列的总值,每次通过加每两列之间的差值得出下一列的总值 算第一列我们只需要让当前点* ...
- 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)
2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组
2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色
2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...
- NOIP模拟测试17&18
NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...
随机推荐
- 跑的比谁都快 51Nod - 1789
香港记者跑的比谁都快是众所周知的常识. 现在,香港记者站在一颗有 nn 个点的树的根结点上(即1号点),编号为 ii 的点拥有权值 a[i]a[i] ,数据保证每个点的编号都小于它任意孩子结 ...
- 【源码解析】凭什么?spring boot 一个 jar 就能开发 web 项目
问题 为什么开发web项目,spring-boot-starter-web 一个jar就搞定了?这个jar做了什么? 通过 spring-boot 工程可以看到所有开箱即用的的引导模块 spring- ...
- Maven下载速度过慢问题已解决
因为Maven 默认仓库的服务器在国外所以我们国内的使用效果极差,我们可以修改成为国内镜像地址加速下载. 两种方法 修改全局文件 C:\Users\您电脑帐号\ .m2\settings.xml没有文 ...
- java零碎知识(每种数据类型默认值,多大,取值范围)
只要记下字节就好了 其它不必死记,取值范围:没有正负的,2的 字节数*8次方-1 , 凡是有正负的2的 (字节数*8)-1次方 -1 比如: 1.byte(有正负):先计算是2的几次方:字节数1*( ...
- 微信小程序中事件
微信小程序中事件 一.常见的事件有 类型 触发条件 最低版本 touchstart 手指触摸动作开始 touchmove 手指触摸后移动 touchcancel 手指触摸动作被打断,如来电提醒,弹窗 ...
- 拿起键盘就是干:跟我一起徒手开发一套分布式IM系统
1.引言 老读者应该还记得我在去年国庆节前分享过一篇<技术干货:从零开始,教你设计一个百万级的消息推送系统>,虽然我在文中有贴一些伪代码,依然有些朋友希望能直接分享一些可以运行的源码.好吧 ...
- Math中ceil中为什么会有负零
double c=Math.ceil(-0.5); double d=Math.floor(0.5); System.out.println(c); System.out.println(d); Sy ...
- 非阻塞IO模型
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> # ...
- Flink实战| Flink+Redis实时防刷接口作弊
随着人口红利的慢慢削减,互联网产品的厮杀愈加激烈,大家开始看好下沉市场的潜力,拼多多,趣头条等厂商通过拉新奖励,购物优惠等政策率先抢占用户,壮大起来.其他各厂商也紧随其后,纷纷推出自己产品的极速版,如 ...
- {每日一题}:四种方法实现打印feibo斐波那契数列
刚开始学Python的时候,记得经常遇到打印斐波那契数列了,今天玩玩使用四种办法打印出斐波那契数列 方法一:使用普通函数 def feibo(n): """ 打印斐波那契 ...