比赛链接: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相关推荐

  1. 光刷题不参加这些算法竞赛?太亏了!

    前言 大家好,我是bigsai.这篇文章给大家介绍算法竞赛,如果有帮助还请一键三连支持一下! 最近有些学妹问我咱们计算机专业的有哪些比赛可以参加呢?我眉头一皱,想了想咱们计算机专业竞赛好像确实蛮多的, ...

  2. 《算法竞赛中的初等数论》(五)正文 0x50筛法(ACM / OI / MO)(十五万字符数论书)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...

  3. c语言二分法查找一个数_算法竞赛小专题系列(1):二分法、三分法

    本系列是这本算法教材的扩展资料:<算法竞赛入门到进阶>. 罗勇军.郭卫斌. 清华大学出版社 二分法和三分法是算法竞赛中常见的算法思路,本文介绍了它们的理论背景.模板代码.典型题目. 1. ...

  4. 二分法、三分法 --算法竞赛专题解析(1)

    本系列文章将于2021年整理出版,书名<算法竞赛专题解析>. 前驱教材:<算法竞赛入门到进阶> 清华大学出版社 2019.8 网购:京东 当当      作者签名书 如有建议, ...

  5. 【更新完毕】《算法竞赛中的初等数论》(ACM / OI / MO)前言、后记、目录索引(十五万字符的数论书)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 <算法竞赛中的初等数论>的全部内容的 Portable Document Format 版 ...

  6. UVA-1598 交易所 题解答案代码 算法竞赛入门经典第二版

    GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 AC代码 有意思的一个题目.书上说这是一个不错的优先队列练习题,但实际上它其实是一个 ...

  7. 推荐算法竞赛TOP方案合集

    作 者:九羽 公众号:炼丹笔记 推荐算法竞赛相关 会议赛 (一)2020 ACM Twitter RecSys Challenge 问题背景: Twitter上呈现的是正在发生的事情,也是人们现在谈论 ...

  8. 《算法竞赛中的初等数论》(二)正文 0x20同余(ACM / OI / MO)(十五万字符数论书)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...

  9. 如何学习机器学习、看待算法竞赛?粉丝精选留言

    在前几日的赠书活动中,看到大家的积极留言,非常用心,可以看出对机器学习的热爱.经授权,CV君特意将一些52CV粉丝对学习机器学习.参与算法竞赛的看法.理解与经验放出来,与大家分享,值得收藏细品,希望他 ...

最新文章

  1. android Camera照相机技术(一)
  2. Android Tcp操作
  3. linux 内存显示括号内字母的含义
  4. 四篇关于恶意软件对抗方面的paper要点
  5. 基础练习 字母图形 c语言
  6. 微服务的概念——《微服务设计》读书笔记
  7. python爬京东(带GUI)
  8. 计算机过程控制系统李向舜pdf,2010-2011学年一学期(16-19周)考试安排表(1)
  9. 打造了一把安全的锁,不料把自己也锁在了里面
  10. javascript中eval解析JSON字符串
  11. react18新特性
  12. 三调 图斑地类面积_关于三调,国土空间规划中至少需要这些知识
  13. 如何玩转腾讯云学生服务器(新手指南)
  14. Deepin20(1002版本)安装LBP2900打印机
  15. 优秀Logo设计需要留白
  16. Linux命令hostname -i
  17. sfm-learner学习心得
  18. linux 查看 man 路径配置文件 man.config,linux中的man(zz)
  19. Tromino(更准确地说是“右Trominio”)是一个由棋盘上的三个1x1方块组成的L型骨牌。
  20. jmeter第21讲 阿里云下载安装JDK并配置环境变量

热门文章

  1. Ubuntu自定义终端窗口位置
  2. BeautifulSoup 根据文本内容反查标签
  3. 1.4.1.Documents,Fields和Schema概述
  4. SharePoint品牌化和自定义--第三章节--收集品牌化需求(3)--要当心的地方
  5. CF 6 A. Triangle
  6. WSS 3.0 Object Model
  7. PowerBuilder9对中文字符串的处理方法
  8. 运动目标的背景建模-混合高斯背景建模和KNN模型建模的OpenCV代码实现
  9. 用正则表达式验证php用户注册系统,php用户注册时常用的检验函数实例总结
  10. 超级计算机的生产流程,精密陶瓷的生产流程分为几个步骤(图)