hihoCoder太阁最新面经算法竞赛18
比赛链接:http://hihocoder.com/contest/hihointerview27/problems
A.Big Plus
模拟水
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int maxn = 505; 5 int n; 6 char G[maxn][maxn]; 7 8 bool ok(int x, int y) { 9 return x >= 0 && x < n && y >= 0 && y < n; 10 } 11 int check(int x, int y) { 12 int s = 0; 13 while(ok(x,y-s)&&ok(x,y+s)&&ok(x-s,y)&&ok(x+s,y)&&G[x+s][y]&&G[x-s][y]&&G[x][y+s]&&G[x][y-s]) s++; 14 return s - 1; 15 } 16 17 int main() { 18 // freopen("in", "r", stdin); 19 memset(G, 0, sizeof(G)); 20 while(~scanf("%d", &n)) { 21 for(int i = 0; i < n; i++) { 22 scanf("%s", G[i]); 23 } 24 for(int i = 0; i < n; i++) { 25 for(int j = 0; j < n; j++) { 26 G[i][j] -= '0'; 27 } 28 } 29 int ret = 0; 30 for(int i = 0; i < n; i++) { 31 for(int j = 0; j < n; j++) { 32 if(G[i][j] == 1) { 33 ret = max(ret, check(i, j)); 34 } 35 } 36 } 37 printf("%d\n", ret); 38 } 39 return 0; 40 }
B.Interval Coverage
初始的目标是[x,y],结束的目标应当是[y,y]: 因为排好序了的,所以先二分,找到一个区间[l,r],使得r尽可能大,并且l不超过x,找到了这么一个l,位置的下标为pos。 那么,现在就需要在排号序后下标为[1,pos]的r中选择最远的,由于用st表预处理了这个东西,所以直接O(1)可以得到最远的r=t(是值)。 其实就不需要关注这个t对应的那条线段是谁了,反正已经符合条件了,那么就更新x=t就行了,目标变成了[t,y]。讨论区的意思是还有O(n)的解法。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 typedef struct Node { 5 int s, t; 6 }Node; 7 const int maxn = 100100; 8 int n, x, y; 9 Node p[maxn]; 10 11 int dp[maxn][20]; 12 int a[maxn], b[maxn]; 13 14 bool cmp(Node a, Node b) { 15 if(a.s == b.s) return a.t < b.t; 16 return a.s < b.s; 17 } 18 19 void st() { 20 for(int i = 1; i <= n; i++) dp[i][0] = b[i]; 21 int k = int(log(n+1.0)/log(2.0)); 22 for(int j = 1; j <= k; j++) { 23 for(int i = 1; i + (1 << j) - 1 <= n; i++) { 24 dp[i][j] = max(dp[i][j-1], dp[i+(1<<(j-1))][j-1]); 25 } 26 } 27 } 28 29 int query(int l, int r) { 30 int k = int(log(r-l+1.0)/log(2.0)); 31 return max(dp[l][k], dp[r-(1<<k)+1][k]); 32 } 33 34 int bs(int lo, int hi, int x) { 35 int pos; 36 while(lo <= hi) { 37 int mid = (lo + hi) >> 1; 38 if(a[mid] <= x) { 39 pos = mid; 40 lo = mid + 1; 41 } 42 else hi = mid - 1; 43 } 44 return pos; 45 } 46 47 int main() { 48 // freopen("in", "r", stdin); 49 while(~scanf("%d%d%d",&n,&x,&y)) { 50 for(int i = 1; i <= n; i++) { 51 scanf("%d%d",&p[i].s,&p[i].t); 52 } 53 sort(p+1, p+n+1, cmp); 54 for(int i = 1; i <= n; i++) { 55 a[i] = p[i].s; 56 b[i] = p[i].t; 57 } 58 st(); 59 int ret = 0; 60 bool flag = 0; 61 while(x < y) { 62 int pos = bs(1, n, x); 63 int t = query(1, pos); 64 if(x == t) { 65 flag = 1; 66 break; 67 } 68 x = t; 69 ret++; 70 } 71 if(flag) puts("-1"); 72 else printf("%d\n", ret); 73 } 74 return 0; 75 }
C.Split Array
题意仅仅是要求分成的小数组里有且仅有k个数字并且连续。那么从头到尾扫一边,每一次都提出一个数字就行了。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int maxn = 100500; 5 int n, m, k, a; 6 int cnt[maxn]; 7 8 int main() { 9 // freopen("in", "r", stdin); 10 int T; 11 scanf("%d", &T); 12 while(T--) { 13 scanf("%d%d",&n,&k); 14 memset(cnt, 0, sizeof(cnt)); 15 m = 0; 16 for(int i = 1; i <= n; i++) { 17 scanf("%d", &a); 18 cnt[a]++; 19 m = max(m, a); 20 } 21 bool flag = 0; 22 for(int i = 1; i <= m; i++) { 23 if(flag == 1) break; 24 if(cnt[i] > 0) { 25 while(cnt[i] > 0) { 26 for(int j = i; j < i + k; j++) { 27 if(cnt[j] > 0) cnt[j]--; 28 else { 29 flag = 1; 30 break; 31 } 32 } 33 } 34 } 35 } 36 if(flag) puts("NO"); 37 else puts("YES"); 38 } 39 return 0; 40 }
转载于:https://www.cnblogs.com/kirai/p/6189376.html
hihoCoder太阁最新面经算法竞赛18相关推荐
- 光刷题不参加这些算法竞赛?太亏了!
前言 大家好,我是bigsai.这篇文章给大家介绍算法竞赛,如果有帮助还请一键三连支持一下! 最近有些学妹问我咱们计算机专业的有哪些比赛可以参加呢?我眉头一皱,想了想咱们计算机专业竞赛好像确实蛮多的, ...
- 《算法竞赛中的初等数论》(五)正文 0x50筛法(ACM / OI / MO)(十五万字符数论书)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...
- c语言二分法查找一个数_算法竞赛小专题系列(1):二分法、三分法
本系列是这本算法教材的扩展资料:<算法竞赛入门到进阶>. 罗勇军.郭卫斌. 清华大学出版社 二分法和三分法是算法竞赛中常见的算法思路,本文介绍了它们的理论背景.模板代码.典型题目. 1. ...
- 二分法、三分法 --算法竞赛专题解析(1)
本系列文章将于2021年整理出版,书名<算法竞赛专题解析>. 前驱教材:<算法竞赛入门到进阶> 清华大学出版社 2019.8 网购:京东 当当 作者签名书 如有建议, ...
- 【更新完毕】《算法竞赛中的初等数论》(ACM / OI / MO)前言、后记、目录索引(十五万字符的数论书)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 <算法竞赛中的初等数论>的全部内容的 Portable Document Format 版 ...
- UVA-1598 交易所 题解答案代码 算法竞赛入门经典第二版
GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 AC代码 有意思的一个题目.书上说这是一个不错的优先队列练习题,但实际上它其实是一个 ...
- 推荐算法竞赛TOP方案合集
作 者:九羽 公众号:炼丹笔记 推荐算法竞赛相关 会议赛 (一)2020 ACM Twitter RecSys Challenge 问题背景: Twitter上呈现的是正在发生的事情,也是人们现在谈论 ...
- 《算法竞赛中的初等数论》(二)正文 0x20同余(ACM / OI / MO)(十五万字符数论书)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...
- 如何学习机器学习、看待算法竞赛?粉丝精选留言
在前几日的赠书活动中,看到大家的积极留言,非常用心,可以看出对机器学习的热爱.经授权,CV君特意将一些52CV粉丝对学习机器学习.参与算法竞赛的看法.理解与经验放出来,与大家分享,值得收藏细品,希望他 ...
最新文章
- android Camera照相机技术(一)
- Android Tcp操作
- linux 内存显示括号内字母的含义
- 四篇关于恶意软件对抗方面的paper要点
- 基础练习 字母图形 c语言
- 微服务的概念——《微服务设计》读书笔记
- python爬京东(带GUI)
- 计算机过程控制系统李向舜pdf,2010-2011学年一学期(16-19周)考试安排表(1)
- 打造了一把安全的锁,不料把自己也锁在了里面
- javascript中eval解析JSON字符串
- react18新特性
- 三调 图斑地类面积_关于三调,国土空间规划中至少需要这些知识
- 如何玩转腾讯云学生服务器(新手指南)
- Deepin20(1002版本)安装LBP2900打印机
- 优秀Logo设计需要留白
- Linux命令hostname -i
- sfm-learner学习心得
- linux 查看 man 路径配置文件 man.config,linux中的man(zz)
- Tromino(更准确地说是“右Trominio”)是一个由棋盘上的三个1x1方块组成的L型骨牌。
- jmeter第21讲 阿里云下载安装JDK并配置环境变量
热门文章
- Ubuntu自定义终端窗口位置
- BeautifulSoup 根据文本内容反查标签
- 1.4.1.Documents,Fields和Schema概述
- SharePoint品牌化和自定义--第三章节--收集品牌化需求(3)--要当心的地方
- CF 6 A. Triangle
- WSS 3.0 Object Model
- PowerBuilder9对中文字符串的处理方法
- 运动目标的背景建模-混合高斯背景建模和KNN模型建模的OpenCV代码实现
- 用正则表达式验证php用户注册系统,php用户注册时常用的检验函数实例总结
- 超级计算机的生产流程,精密陶瓷的生产流程分为几个步骤(图)