比较水的一场比赛,却不能 AK

T1

有 \(n\) 次,每次给 \(A_i,B_i\) 问以 \(i\) 结尾的 \(A,B\) 的匹配中最大和的最小值

问最大和的最小值,却不用二分。

如果暴力排序,显然会超时

但是 \(A_i,B_i\le 100\) ,一个桶解决的事!

#include<bits/stdc++.h>
using namespace std;
const int N=100005,M=105;
int n,x[N],y[N],tx[M],ty[M],p[M],q[M],l,r,ans;
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++) {
scanf("%d%d",&x[i],&y[i]);
tx[x[i]]++,ty[y[i]]++;
for(int i=1;i<=100;i++)
p[i]=tx[i],q[i]=ty[i];
l=1,r=100,ans=0;
while(1) {
while(!p[l] && l<=100)++l;
while(!q[r] && r)--r;
if(l>100 || !r)break;
ans=max(ans,l+r);
if(p[l]>q[r])p[l]-=q[r],q[r]=0;
else q[r]-=p[l],p[l]=0;
}
printf("%d\n",ans);
}
}

T2

从 1 到 \(n\) 依次经过 \(n\) 个点,每个点有 \(t_i,x_i\),有一个初始能力是 \(w\) 的钻头

设当前钻头能力是 \(p\)

若 \(t_i=1\) 可选择开采,获得 \(x_i\cdot p\) 的价值,损耗 \(k\%\),即 \(p=p*(1-0.01k)\)

若 \(t_i=2\) 可选择修复,支付 \(x_i\cdot p\) 的价值,修复 \(c\%\),即 \(p=p*(1+0.01c)\)

问最大价值。

显然的 dp

若正来,会发现算法的瓶颈是钻头能力,考虑舍去这一维

因为舍去了,正来会有后效性,于是果断反过来。

可以发现当前钻头对后面的影响无非就是乘上一个值,

可以把初始能力变为 1 ,最后乘上 \(w\)

设 \(f_i\) 为经过 \([i,n]\) 的最大价值,转移不难,如果 \(t_i=1\),

那么 \([i+1,n]\) 的初始钻头能力就是 \(f_{i+1}*(1-0.01k)\)

则 \(f_i=\max\{f_{i+1},f_{i+1}*(1-0.01k)+x_i\}\)

\(t_i=2\) 同理

好像 \(f\) 可以压掉,于是一个变量就搞定了

#include<bits/stdc++.h>
using namespace std;
typedef double db;
const int N=100005;
int n,K,C,W,x[N];
db ans,y[N];
int main() {
freopen("exploit.in","r",stdin);
freopen("exploit.out","w",stdout);
scanf("%d%d%d%d",&n,&K,&C,&W);
for(int i=1;i<=n;i++)scanf("%d%lf",&x[i],&y[i]);
for(int i=n;i;i--) {
if(x[i]==1)ans=max(ans,ans*(1-0.01*K)+y[i]);
else ans=max(ans,ans*(1+0.01*C)-y[i]);
}
printf("%.2lf",ans*W);
}

T3

给一个 \(n\times m\) 的地图,图中有一些怪兽,

其对其他格点产生的威胁是两点的曼哈顿距离

问从起点到终点的最优路径,使得路径中最小威胁值最大

一个 bfs 求出威胁,然后一个 spfa ,没了

#include<bits/stdc++.h>
using namespace std;
const int N=505,dx[5]={1,-1,0,0},dy[5]={0,0,1,-1};
int n,m,sx,sy,ex,ey,vis[N][N],dag[N][N],dis[N][N];
char mp[N][N];
struct po {
int x,y; po() { }
po(int _x,int _y):
x(_x),y(_y) { }
}u;
queue<po>q;
int main() {
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) {
scanf("%s",mp[i]+1);
for(int j=1;j<=m;j++) {
dag[i][j]=2500000;
if(mp[i][j]=='V')sx=i,sy=j;
if(mp[i][j]=='J')ex=i,ey=j;
if(mp[i][j]=='+')q.push(po(i,j)),dag[i][j]=0;
}
}
while(!q.empty()) {
u=q.front(),q.pop();
for(int i=0,xx,yy;i<4;i++) {
xx=u.x+dx[i],yy=u.y+dy[i];
if(xx<1||xx>n||yy<1||yy>m)continue;
if(dag[u.x][u.y]+1<dag[xx][yy]) {
dag[xx][yy]=dag[u.x][u.y]+1;
q.push(po(xx,yy));
}
}
}
dis[sx][sy]=dag[sx][sy];
vis[sx][sy]=1;
q.push(po(sx,sy));
while(!q.empty()) {
u=q.front(),q.pop();
vis[u.x][u.y]=0;
for(int i=0,xx,yy;i<4;i++) {
xx=u.x+dx[i],yy=u.y+dy[i];
if(xx<1||xx>n||yy<1||yy>m)continue;
if(min(dis[u.x][u.y],dag[xx][yy])>dis[xx][yy]) {
dis[xx][yy]=min(dis[u.x][u.y],dag[xx][yy]);
if(!vis[xx][yy])q.push(po(xx,yy)),vis[xx][yy]=1;
}
}
}
printf("%d",dis[ex][ey]);
}

总结

  • 学会反着来 & 思路转换

2021.05.03【NOIP提高B组】模拟 总结的更多相关文章

  1. 5820. 【NOIP提高A组模拟2018.8.16】 非法输入(模拟,字符串)

    5820. [NOIP提高A组模拟2018.8.16] 非法输入 (File IO): input:aplusb.in output:aplusb.out Time Limits: 1000 ms   ...

  2. JZOJ 5818. 【NOIP提高A组模拟2018.8.15】 做运动

    5818. [NOIP提高A组模拟2018.8.15] 做运动 (File IO): input:running.in output:running.out Time Limits: 2000 ms  ...

  3. JZOJ 5812. 【NOIP提高A组模拟2018.8.14】 区间

    5812. [NOIP提高A组模拟2018.8.14] 区间 (File IO): input:range.in output:range.out Time Limits: 1000 ms  Memo ...

  4. 2021.06.05【NOIP提高B组】模拟 总结

    T1 题意:给你一个 \(n\) 个点 \(n\) 条边的有向图, 求每个店经过 \(K\) 条边后的边权和.最小边权 \(K\le 10^{10}\) 考试时:一直想着环,结果一直不知道怎么做 正解 ...

  5. 2021.05.05【NOIP提高B组】模拟 总结

    T1 给你一棵树,要求增加最少的边权是的从根到每一个叶子的长度相等 不能改变原有的最大长度 这是一个贪心:尽可能往深度小的边增加 先预处理出 \(mx_i\) 表示从 \(i\) 到叶子的最大长度 然 ...

  6. [JZOJ5817] 【NOIP提高A组模拟2018.8.15】 抄代码

    Description J 君是机房的红太阳,每次模拟她总是 AK 虐场.然而在 NOIP2117 中,居然出现了另一位 AK 的选手 C 君! 这引起了组委会的怀疑,组委会认为 C 君有抄袭 J 君 ...

  7. [JZOJ5818] 【NOIP提高A组模拟2018.8.15】 做运动

    Description 一天,Y 君在测量体重的时候惊讶的发现,由于常年坐在电脑前认真学习,她的体重有了突 飞猛进的增长. 幸好 Y 君现在退役了,她有大量的时间来做运动,她决定每天从教学楼跑到食堂来 ...

  8. 【NOIP提高A组模拟2018.8.14】 区间

    区间加:差分数组修改 O(n)扫描,负数位置单调不减 #include<iostream> #include<cstring> #include<cstdio> # ...

  9. [jzoj 5782]【NOIP提高A组模拟2018.8.8】 城市猎人 (并查集按秩合并+复杂度分析)

    传送门 Description 有n个城市,标号为1到n,修建道路花费m天,第i天时,若gcd(a,b)=m-i+1,则标号为a的城市和标号为b的城市会建好一条直接相连的道路,有多次询问,每次询问某两 ...

  10. [jzoj 5781]【NOIP提高A组模拟2018.8.8】秘密通道 (最短路)

    传送门 Description 有一副nm的地图,有nm块地,每块是下列四种中的一种: 墙:用#表示,墙有4个面,分别是前面,后面,左面,右面. 起点:用C表示,为主角的起点,是一片空地. 终点:用F ...

随机推荐

  1. JavaScript实现动态表格

    运行效果: 源代码: 1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta char ...

  2. Django高级之-缓存

    一 缓存介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消 ...

  3. 小白文-Git-版本控制

    推荐阅读 Git学习-图文并茂还有游戏玩! Git版本控制 注意:开始学习之前,确保自己的网络可以畅通的连接Github:https://github.com,这个是一个国外网站,连起来特别卡,至于用 ...

  4. 1.Docker容器学习之新生入门必备基础知识

    0x00 Docker 快速入门 1.基础介绍 描述:Docker [ˈdɑ:kə(r)] 是一个基于Go语言开发实现的遵循Apache 2.0协议开源项目,目标是实现轻量级的操作系统虚拟化解决方案: ...

  5. 2021.08.10 Euler函数总结

    2021.08.10 Euler函数总结 知识: 记 φ(n) 表示在 [1,n] 中与 n互质的数的个数. 1.p为质数,则 \[φ(p^l)=p^l-p=p^{l-1}(p-1) \] 注:每p个 ...

  6. 让视障者的网络之路少一些障碍——微软为 Edge 浏览器开发自动图像描述功能并呼吁网页作者补充图片的替换说明

    网页是互联网的组成部分,浏览器是开启互联网大门的钥匙.对于生活在信息时代下的我们而言,每一个人都很难离开网络而生活,其中也包括盲人这一残障群体. 本文的引子是如下一条新闻: IT之家3月18日消息,微 ...

  7. 关于openstreet map的osm文件转shp文件方法(附arcgis10.2插件)

    一.下载并安装对应arcgis版本的osm插件 对应arcgis版本的osm转换插件在arcgis官网可以下载 http://www.arcgis.com/home/search.html?q=Arc ...

  8. Spring Retry 在SpringBoot 中的应用

    Spring Boot中使用Spring-Retry重试框架 Spring Retry提供了自动重新调用失败的操作的功能.这在错误可能是暂时的(例如瞬时网络故障)的情况下很有用. 从2.2.0版本开始 ...

  9. WinForm中TextBox文本过长解决

    方案1: 如果界面有足够的空间 可以使用Multiline属性设置多行 方案2:  可以使用文本框的MouseHover事件,触发弹窗,缺点需要按确定 private void txt_Fnote_M ...

  10. 聊聊如何在华为云IoT平台进行产品开发

    摘要:华为云物联网平台承载着南北向数据互通的功能职责. 本文分享自华为云社区<如何基于华为云IoT物联网平台进行产品开发>,作者: Super.雯 . 华为云物联网平台承载着南北向数据互通 ...