文章目录

  • A 上课点名
  • B 消灭复读机
  • C 拾取金币
  • D 同学聚会
  • E 木工的烦恼
  • F 数字游戏
  • G 子序列问题
  • H 下大雪了
  • I 丢失的数字
  • J 最大岛屿
  • K 山区修路

学如逆水行舟,不进则退。

A 上课点名

用两个堆将数列分成两部分,一个用来求最大(即第k小),它的size正好是要求的k,一个用来求最小,更新之前的堆

B 消灭复读机

将所有的连通图求出来,每个连通图都用一个vector<pair<int,int>> 表示,然后排序,用所有的点减去最小的点,然后用一个map<vector<pair<int,int>> 记录最多的图案

C 拾取金币

用之前所有的时间点去更新当前时间,用时间差和距离判断可否更新
复杂度O(m^2) dp

const int maxn = 1e4+10;
// int dp[maxn][maxn];
int dp[maxn];
LL t[maxn],x[maxn],y[maxn];
LL dis(LL x,LL y,LL x1,LL y1){return abs(x1-x)+abs(y1-y);
}
int main(void)
{int n,m;cin>>n>>m;int ans = 0;for(int i = 1;i <= m; ++i){scanf("%lld%lld%lld",&t[i],&x[i],&y[i]);dp[i] = 1;for(int j = 1;j < i; ++j){if(dis(x[j],y[j],x[i],y[i]) <= t[i]-t[j])dp[i] = max(dp[i],dp[j]+1);}ans = max(ans,dp[i]);}cout<<ans<<endl;return 0;
}

D 同学聚会

模拟即可,字符最好用数组来读,这样不会出错

E 木工的烦恼

注意是分成T块,不是切T刀
面积相等,我们可以枚举每一刀的位置,因为每一刀左右两边的面积应该都是x*y/T 的整数倍,枚举左边有多少个块即可

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> P;
#define me(ar) memset(ar,0,sizeof(ar))
#define Pb push_back
const double pi = acos(-1.0);
const LL mod = 1e9+7;
LL qpow(LL a,LL b){LL s= 1;while(b > 0){if(b&1) s = s*a%mod;a = a*a%mod;b >>= 1;}return s;
}
LL gcd(LL a,LL b){return b?gcd(b,a%b):a;
}
int dr[2][4] = {1,-1,0,0,0,0,-1,1};
double x,y;
int T;
double rate(double x,double y){return max(x,y)/min(x,y);
}
double dfs(double x,double y,int T){if(T == 0) return rate(x,y);double ans = 1e5;int TT = T+1;for(int i = 1;i <= TT/2; ++i){double fen = x/TT;ans = min(ans,max(dfs(fen*i,y,i-1),dfs(fen*(TT-i),y,TT-i-1)));}for(int i = 1;i <= TT/2; ++i){double fen = y/TT;ans = min(ans,max(dfs(x,fen*i,i-1),dfs(x,fen*(TT-i),TT-i-1)));}return ans;
}
int main(void){cin>>x>>y>>T;T--;printf("%.6f\n",dfs(x,y,T));  return 0;
}

F 数字游戏

施工中

G 子序列问题

教练说,应该有这种觉悟,看到什么问题就想到什么算法
对于本题

  1. 看到子序列就应该想到dp
  2. 看到u到v的路径就应该想到lca
    f = lca(u,v)
    从u -> f 找子序列
    从v -> f 反着找子序列
    如果两头能对着,就存在这个子序列
const int maxn = 1e5+10;const int maxlogv = 17;
struct Edge{int to,weight;Edge(int t,int w):to(t),weight(w){};
};
vector<Edge> G[maxn];
int w[maxn];
int id[maxn],dis[maxn];
int vs[maxn*2],depth[maxn*2];
int dp[maxn*2][maxlogv];
int DP[maxn][101];
void dfs(int node,int fa,int d,int &k){if(fa != -1) for(int i = 1;i <= 100; ++i) DP[node][i] = DP[fa][i];DP[node][w[node]] = node;  id[node] = k;vs[k] = node;depth[k++] = d;// dis[node] = distance;for(int i = 0;i < (int)G[node].size(); ++i){Edge &t = G[node][i];if(t.to == fa) continue;dis[t.to] = dis[node]+t.weight;dfs(t.to,node,d+1,k);vs[k] = node;depth[k++] = d;}
}void init_rmq(int n){for(int i = 0;i < n ; ++i) dp[i][0] = i;for(int j = 1;(1<<j) <= n; ++j){for(int i = 0;i + (1<<j)-1 < n; ++i){if(depth[dp[i][j-1]]< depth[dp[i+(1<<(j-1))][j-1]])dp[i][j] = dp[i][j-1];elsedp[i][j] = dp[i+(1<<(j-1))][j-1];}}
}
int query(int l,int r){int k = 0;while((1<<(k+1)) <= r-l+1) k++;if(depth[dp[l][k]] < depth[dp[r-(1<<k)+1][k]])return dp[l][k];else return dp[r-(1<<k)+1][k];
}
int lca(int u,int v){return vs[query(min(id[u],id[v]),max(id[u],id[v]))];
}
void init(int n){int k = 0;dfs(0,-1,0,k);init_rmq(2*n-1);
}
int a[maxn];
int main(void)
{int n,q,m;cin>>n>>m;int u,v;rep(i,0,n-1){scanf("%d%d",&u,&v);u--,v--;G[u].Pb(Edge(v,1));G[v].Pb(Edge(u,1));}// cout<<endl;rep(i,0,n) scanf("%d",&w[i]);// cout<<endl;for(int i = 0;i < n; ++i)for(int j = 1;j <= 100; ++j) DP[i][j] = INF;init(n);// cout<<endl;// cout<<endl;cin>>q;// cout<<q<<endl;while(q--){int k; scanf("%d",&k);scanf("%d%d",&u,&v);u--,v--;for(int i = 1;i <= k; ++i) scanf("%d",&a[i]);int f = lca(u,v);int i;for(i = 1;i <= k; ++i){int F = DP[u][a[i]];if(F == INF) break;if(depth[F] < depth[f]) break;u = F;}// i--;// cout<<f<<endl;int j;for(j = k; j >= 1; --j){int F = DP[v][a[j]];if(F == INF) break;if(depth[F] < depth[f]) break;v = F;}// j++;// cout<<i<<" "<<j<<endl;if(i > j) puts("Yes");else       puts("No"); }return 0;
}

H 下大雪了

板子题: 有向图的强连通分量,蓝书模板

I 丢失的数字

板子题:直接敲大数板子,然后枚举0-9 即可(这不是最优的,但是最不费脑子的)

J 最大岛屿

同B的存储连通图的方法,自定义排序方式

K 山区修路

需要先离散化,即将高度排序得到b1… bn
dp[i][j] 代表第i块高度为 bjb_jbj​ 时的最小值是多少
dp[i][j]=min(dp[i−1][k])+abs(a[i]−b[j]),k=0,1,2....jdp[i][j] = min(dp[i - 1][k]) + abs(a[i] - b[j]), k = 0, 1, 2....jdp[i][j]=min(dp[i−1][k])+abs(a[i]−b[j]),k=0,1,2....j

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <climits>
using namespace std;
int dp[505][505];
int a[505];
int b[505];int main(){int t;cin >> t;while(t--){int n;cin >> n;for(int i = 0;i < n;i++){scanf("%d",&a[i]);}memcpy(b,a,n * sizeof(a[0]));sort(b,b+n);for(int i = 0;i < n;i++){for(int j = 0;j < n;j++){int t = INT_MAX;for(int k = 0;k <= j;k++){t = min(t,dp[i][k]);}dp[i+1][j] = t + abs(b[j] - a[i]);}}int ma = INT_MAX;for(int i = 0;i < n;i++){if(dp[n][i] < ma){ma = dp[n][i];}}reverse(a,a+n);for(int i = 0;i < n;i++){for(int j = 0;j < n;j++){int t = INT_MAX;for(int k = 0;k <= j;k++){t = min(t,dp[i][k]);}dp[i+1][j] = t + abs(b[j] - a[i]);}}int mi = INT_MAX;for(int i = 0;i < n;i++){if(dp[n][i] < ma){mi = dp[n][i];}}cout << min(mi,ma) << endl;}
}

Contest1019 - 2019年天梯赛省赛选拔相关推荐

  1. 2019 ACM - ICPC 上海网络赛 E. Counting Sequences II (指数型生成函数)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  2. 2019年数学建模国赛(国一)经历总结

    11月2号下午,百无聊赖的笔者忽然刷到一篇微信推送"2019年数模国赛获奖名单公示",心里一紧,屏住呼吸点进去看,没想到居然在一等奖名单里发现了熟悉的名字,心中一阵狂喜.然后深深吸 ...

  3. 2019年电赛国赛D题《简易电路特性测试仪》训练总结----待测三极管共射放大电路部分

    系列文章链接目录 一.2017年电赛国赛H题<远程幅频特性测试装置>训练总结(DDS信号源部分) 二.2017年电赛国赛H题<远程幅频特性测试装置>训练总结(放大器部分) 三. ...

  4. Python【2019年蓝桥杯省赛C++填空】

    文章目录 Python[2019年蓝桥杯省赛C++填空] A.平方和 代码: 答案:2658417853 B.数列求值 代码: 答案:4659 C.最大求雨量 答案:34 D.迷宫 代码: 答案: 感 ...

  5. 团队天梯赛(GLPT) 2017年天梯赛大区赛题集

    2017年天梯赛大区赛题集 L1: 出生年 stl set 的使用 #include<iostream> #include<set> #include<stdio.h&g ...

  6. 2019年电赛国赛D题《简易电路特性测试仪》训练总结----题目引入与概述

    系列文章链接目录 一.2017年电赛国赛H题<远程幅频特性测试装置>训练总结(DDS信号源部分) 二.2017年电赛国赛H题<远程幅频特性测试装置>训练总结(放大器部分) 三. ...

  7. 姚明的“内蒙古时间”:现身2019年WCBA全明星周末赛现场

    内蒙古自治区副主席艾丽华会见姚明. 图图 摄 内蒙古自治区副主席艾丽华会见姚明. 图图 摄 中新网呼和浩特1月28日电 题:姚明的"内蒙古时间" 中新网记者李爱平 第一次来内蒙古自 ...

  8. 2019年蓝桥杯国赛总结

    2019年蓝桥杯国赛北京站,我们是C/C++B组,赛点在中国农业大学东校区,比赛时间为5月25日下午14点--下午18点,赛完26日上午出成绩,且26日下午13点--16点有个峰会可以凭蓝桥杯准考证领 ...

  9. 2019天下3最新服务器,天下3:2019标准号全民竞技赛【太虚】门派定位解析及入门讲解...

    原标题:天下3:2019标准号全民竞技赛[太虚]门派定位解析及入门讲解 最近身边很多朋友都在玩今年的全民竞技赛,但是由于除了男女龙外的其他每个门派只能限定1人出战,又或者是为了阵容搭配需求,都需要重新 ...

最新文章

  1. 1476. Lunar Code
  2. java继承对象转换_java 继承的基础(转)
  3. pythons_pythons是什么
  4. AutoMapper的使用
  5. 巧克力王国 BZOJ 2850
  6. linux下编程输入密码不回显
  7. Fastjson 1.2.22-24 反序列化漏洞分析
  8. centos7卸载旧jdk安装新jdk1.8
  9. 中级软件设计师真题与答案(2009到2018)
  10. C#操作Excel数据库方法
  11. 邮件服务器备案,关于企业邮箱域名备案事项通知
  12. webservice和jms的区别
  13. c语言中while循环语句的作用,while和do while循环,C语言while和do while循环详解
  14. python机器学习——加州房价
  15. 区块链DApp从零开始学 (二) | 超详细 DApp创建 | 发行代币token | 宠物领养
  16. ACTF-Junior-2021 linkgame
  17. 11235找规律c语言程序设计,找规律练习习题及答案
  18. 关于计算机科学技术的作文,关于描写计算机的作文
  19. 计算机英语重点,计算机英语复习重点.doc
  20. 显卡驱动的作用(本质作用)

热门文章

  1. hive函数-日期函数汇总
  2. 每周一总结 总结(1)
  3. 德国黑客攻破苹果Touch ID指纹识别系统
  4. 振动力学篇四:连续系统的振动(杆、轴、弦、梁)
  5. 苹果伪激活服务器配置文件,mac下自定义伪协议配置
  6. 极速云计算机,云电脑极速版
  7. uni-app禁止点击_5分钟极速入门uniapp
  8. 每天学一点flash 76 百度MP3音乐APi接口使用
  9. ARM中的寄存器(R0-R15)
  10. 放风筝与恋爱 ——写给男生