2019.9.21 csp-s模拟测试49 反思总结
没赶上昨天的考试,不过我这种人考不考都没有多少提升吧。
挺服气的一场考试,有生以来参加的最让人想笑的考试。
T1:养花
取模,区间询问最大值,有点套路化的预处理答案…难点也在预处理上。容易想到分块然后依次处理每个块的答案。
然后考虑每个块内怎么处理每个k。发现对于一个模数k,最大值一定是每个k的倍数的前驱,即比k小的最大值、比k*2小的最大值,比k*3小的最大值…这些数取max,然后%k。
那么在每个块内先扫一遍存下所有值,然后扫一遍值域使每个值域上的位置存小于等于它的最大值。接着枚举k进行处理,比较k、2k、3k…处的最大值。取模操作可以替换成减法来节省时间。
常数很大,但开了O2可以跑过去。
然后真的秀到我的一波操作出现了…题目的数据范围是100000,而数据出现了100001。重测一次我就快乐WA。
别问,问就是开大值域是好习惯。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int a[],ans,n,m,siz=,blo[],num,f[][],sum[];
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
blo[i]=(i-)/siz+;
}
num=blo[n];
for(int i=;i<=num;i++){
memset(sum,,sizeof(sum));
for(int j=(i-)*siz+;j<=i*siz;j++){
sum[a[j]]=a[j];
}
for(int j=;j<=;j++){
sum[j]=max(sum[j],sum[j-]);
}
for(int k=;k<=;k++){
for(int j=;j<=;j+=k){
f[i][k]=max(f[i][k],sum[j+k-]-j);
}
f[i][k]=max(f[i][k],sum[]%k);
}
}
for(int i=,l,r,k;i<=m;i++){
scanf("%d%d%d",&l,&r,&k);
ans=;
if(blo[l]==blo[r]){
for(int j=l;j<=r;j++){
ans=max(ans,a[j]%k);
}
}
else{
for(int j=l;j<=blo[l]*siz;j++){
ans=max(ans,a[j]%k);
}
for(int j=(blo[r]-)*siz+;j<=r;j++){
ans=max(ans,a[j]%k);
}
for(int j=blo[l]+;j<blo[r];j++){
ans=max(ans,f[j][k]);
}
}
printf("%d\n",ans);
}
return ;
}
T2:折射
很显然是个DP,考虑怎么设计状态。数据范围卡掉了n2,又看到每个装置向左向右这样的方向性,想到了我前不久刚刚学会的关路灯。两道题显然不一样,但我觉得第二维八成就是方向了,然后思考怎么转移。
果然我是从转移开始错的…虽然DP一直都不擅长。
正解是按x排序。设f[i][0]为当前装置为最后一个,把光线向右折射,f[i][1]为向左。按x排序以后,当前扫到的i一定x最大,它的1数组一定只会由后面的i更新,而它的0数组只会由前面的i更新。同时它的0数组会去更新前面的1数组,因为这个,第二层循环要倒序进行。x小于xi的j有可能更新f[i][0],而f[i][0]紧接着可能拿来更新x更小的f[j][1]。更新i的0数组还是用0数组更新j的1数组取决于循环到的yj与yi的大小关系。最后把所有的f[i][0]和f[i][1]加起来,因为每个i只有自己组成一种方案的时候无论向左向右都一样,每个i的总方案再减去1。
有点乱…挺玄学的,完全想不到。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n;
long long f[][],ans,mod=;
struct node{
int x,y;
}a[];
bool cmp(node a,node b){
if(a.x<b.x)return true;
else return false;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d%d",&a[i].x,&a[i].y);
}
sort(a+,a+n+,cmp);
for(int i=;i<=n;i++){
f[i][]=f[i][]=;
for(int j=i-;j;j--){
if(a[j].y<a[i].y){
f[i][]=(f[i][]+f[j][])%mod;
}
else f[j][]=(f[i][]+f[j][])%mod;
}
// printf("%d %d %d\n",i,f[i][1],f[i][0]);
}
for(int i=;i<=n;i++){
ans=(ans+f[i][]+f[i][]-+mod)%mod;
}
printf("%lld",ans);
return ;
}
T3:画作
有一个很好想的结论,作画的每一个操作i的范围一定可以被上一个操作的范围包括。染了外面大的一圈,再把中间染回来…这样每一次都可以更新至少一个确定的位置,这个位置以后不会再被染回来造成次数浪费。
那么可以让终态的每个格子向四周连边,异色连1边表示一次操作,同色连0边。每个格子跑一次最短路,找离它最远的黑块的距离,每个这样得出的距离取min,这就是操作数最少的方案。从每个格子出发找最远的黑块等价于从这个黑块出发染到它需要几次操作,因为第一步操作一定是染黑,所以一定是找最远的黑块。同一距离的格子一定可以在同一次操作中被确定。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int r,c,ans=,vis[];
deque<pair<int,int> >q;
int a[][],b[];
int h[]={,,-,,};
int l[]={,-,,,};
int ver[],head[],Next[],edge[],tot;
void add(int x,int y,int z){
ver[++tot]=y;
Next[tot]=head[x];
head[x]=tot;
edge[tot]=z;
}
int bfs(int x){
int num=;
q.clear();
q.push_back(make_pair(x,));
memset(vis,,sizeof(vis));
vis[x]=;
while(!q.empty()){
int u=q.front().first,dis=q.front().second;
if(b[u])num=max(num,dis);
q.pop_front();
for(int i=head[u];i;i=Next[i]){
int v=ver[i],z=edge[i];
if(!vis[v]){
vis[v]=;
if(!z){
q.push_front(make_pair(v,dis));
}
else{
q.push_back(make_pair(v,dis+));
}
}
}
}
// printf("%d ",num);
return num+;
}
int main()
{
scanf("%d%d",&r,&c);
for(int i=;i<=r;i++){
for(int j=;j<=c;j++){
scanf("%1d",&a[i][j]);
b[(i-)*c+j]=a[i][j];
}
}
for(int i=;i<=r;i++){
for(int j=;j<=c;j++){
for(int k=;k<=;k++){
int x=i+h[k],y=j+l[k];
if(x>&&y>&&x<=r&&y<=c){
add((i-)*c+j,(x-)*c+y,((a[i][j]==a[x][y])^));
// printf("(%d,%d) (%d,%d) %d\n",i,j,x,y,((a[i][j]==a[x][y])^1));
}
}
}
}
for(int i=;i<=r;i++){
for(int j=;j<=c;j++){
ans=min(ans,bfs((i-)*c+j));
}
}
printf("%d",ans);
return ;
}
大约是有史以来考得最好的一次吧,也说明我的极限大约就在这里了。
然而大家能做到的事情一定更多,希望大家能变得越来越好。
2019.9.21 csp-s模拟测试49 反思总结的更多相关文章
- 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 A. 斐波那契(fibonacci)
2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色
2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...
- 2019.8.9 NOIP模拟测试15 反思总结
日常爆炸,考得一次比一次差XD 可能还是被身体拖慢了学习的进度吧,虽然按理来说没有影响.大家听的我也听过,大家学的我也没有缺勤多少次. 那么果然还是能力问题吗……? 虽然不愿意承认,但显然就是这样.对 ...
- 2019.8.1 NOIP模拟测试11 反思总结
延迟了一天来补一个反思总结 急匆匆赶回来考试,我们这边大家的状态都稍微有一点差,不过最后的成绩总体来看好像还不错XD 其实这次拿分的大都是暴力[?],除了某些专注于某道题的人以及远程爆踩我们的某学车神 ...
- 2019.10.21 csp-s模拟测试81 反思总结
T1: 把每一行状压,按行DP.设fi,j,k,i表示第几行,j是当前行的1覆盖状态,k是当前行选择按钮的状态.转移的时候枚举j和k,再枚举下一层的按钮选择情况l.如果l和j可以全覆盖当前层则转移合法 ...
- 2019.8.3 NOIP模拟测试12 反思总结【P3938 斐波那契,P3939 数颜色,P3940 分组】
[题解在下面] 早上5:50,Gekoo同学来到机房并表态:“打暴力,打暴力就对了,打出来我就赢了.” 我:深以为然. (这是个伏笔) 据说hzoi的人还差两次考试[现在是一次了]就要重新分配机房,不 ...
- csp-s模拟测试49(9.22)养花(分块/主席树)·折射(神仙DP)·画作
最近有点头晕........... T1 养花 考场我没想到正解,后来打的主席树,对于每个摸数查找1-(k-1),k-(2k-1)...的最大值,事实上还是很容易被卡的但是没有数据好像还比较友善, 对 ...
- 2019.10.30 csp-s模拟测试94 反思总结
头一次做图巨的模拟题OWO 自从上一次听图巨讲课然后骗了小礼物以后一直对图巨印象挺好的233 T1: 对于XY取对数=Y*log(x) 对于Y!取对数=log(1*2*3*...*Y)=log1+lo ...
随机推荐
- Nginx 和 Gunicorn 部署 Django项目
目录 Nginx 和 Gunicorn 部署 Django项目 配置Nginx 安装配置Gunicorn 通过命令行直接启动 Gunicorn 与 uwsgi 的区别,用哪个好呢 Gunicorn u ...
- 你知道的和不知道的sass
关于sass,大多数人的认识一个写css的工具而已 其实就是的 但是这个工具的威力你发挥了多少呢... 以下全部都是干货,希望你能用在自己的项目里 定义集合 我们通常是这么定义变量的 $warning ...
- Vue生命周期的执行过程(面试必备) 极简版
最近准备面试,临时抱佛脚的来回顾一下vue相关的面试题,当然这是不对的,平时还是要努力呀,走起: 1.创建vue实例,Vue(); 2.在创建Vue实例的时候,执行了init(),在init过程中首先 ...
- PAT甲级——1072 Gas Station
A gas station has to be built at such a location that the minimum distance between the station and a ...
- mybtais分批insert
这里自己写了个对集合按一批的数量进行分批操作的分页bean,见PagenationUtil如下: package com.util; import java.util.List ; /** * @au ...
- [原创]关于时间格式的坑(kk:mm:ss、HH:mm:ss与hh:mm:ss)
笔者在项目中使用 kk:mm:ss表示24小时制,却发现与所想的不同,特记此坑,提醒众人: kk:mm:ss 24小时制,时间为1:00:00-24:59:59 HH:mm:ss 24小时制,时间 ...
- Python爬虫笔记【一】模拟用户访问之设置请求头 (1)
学习的课本为<python网络数据采集>,大部分代码来此此书. 网络爬虫爬取数据首先就是要有爬取的权限,没有爬取的权限再好的代码也不能运行.所以首先要伪装自己的爬虫,让爬虫不像爬虫而是像人 ...
- 根据url的属性名来取属性值赋值给js
1.方法一:js的正则表达式:请求路径:http://127.0.0.1/pec/jsp/member/refundOrder.jsp?status=4 <script> var stat ...
- 2018-10-19-C#-序列类为-xml-可以使用的特性大全
title author date CreateTime categories C# 序列类为 xml 可以使用的特性大全 lindexi 2018-10-19 9:9:47 +0800 2018-6 ...
- iftop实时监控网络流量
需要安装,linux自身不自带该命令 中间的<= =>这两个左右箭头,表示的是流量的方向. TX:发送流量 RX:接收流量 TOTAL:总流量 Cumm:运行iftop到目前时间的总流量 ...