hihoCoder太阁最新面经算法竞赛18
比赛链接:http://hihocoder.com/contest/hihointerview27/problems
A.Big Plus
模拟水
#include <bits/stdc++.h>
using namespace std; const int maxn = ;
int n;
char G[maxn][maxn]; bool ok(int x, int y) {
return x >= && x < n && y >= && y < n;
}
int check(int x, int y) {
int s = ;
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++;
return s - ;
} int main() {
// freopen("in", "r", stdin);
memset(G, , sizeof(G));
while(~scanf("%d", &n)) {
for(int i = ; i < n; i++) {
scanf("%s", G[i]);
}
for(int i = ; i < n; i++) {
for(int j = ; j < n; j++) {
G[i][j] -= '';
}
}
int ret = ;
for(int i = ; i < n; i++) {
for(int j = ; j < n; j++) {
if(G[i][j] == ) {
ret = max(ret, check(i, j));
}
}
}
printf("%d\n", ret);
}
return ;
}
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)的解法。
#include <bits/stdc++.h>
using namespace std; typedef struct Node {
int s, t;
}Node;
const int maxn = ;
int n, x, y;
Node p[maxn]; int dp[maxn][];
int a[maxn], b[maxn]; bool cmp(Node a, Node b) {
if(a.s == b.s) return a.t < b.t;
return a.s < b.s;
} void st() {
for(int i = ; i <= n; i++) dp[i][] = b[i];
int k = int(log(n+1.0)/log(2.0));
for(int j = ; j <= k; j++) {
for(int i = ; i + ( << j) - <= n; i++) {
dp[i][j] = max(dp[i][j-], dp[i+(<<(j-))][j-]);
}
}
} int query(int l, int r) {
int k = int(log(r-l+1.0)/log(2.0));
return max(dp[l][k], dp[r-(<<k)+][k]);
} int bs(int lo, int hi, int x) {
int pos;
while(lo <= hi) {
int mid = (lo + hi) >> ;
if(a[mid] <= x) {
pos = mid;
lo = mid + ;
}
else hi = mid - ;
}
return pos;
} int main() {
// freopen("in", "r", stdin);
while(~scanf("%d%d%d",&n,&x,&y)) {
for(int i = ; i <= n; i++) {
scanf("%d%d",&p[i].s,&p[i].t);
}
sort(p+, p+n+, cmp);
for(int i = ; i <= n; i++) {
a[i] = p[i].s;
b[i] = p[i].t;
}
st();
int ret = ;
bool flag = ;
while(x < y) {
int pos = bs(, n, x);
int t = query(, pos);
if(x == t) {
flag = ;
break;
}
x = t;
ret++;
}
if(flag) puts("-1");
else printf("%d\n", ret);
}
return ;
}
C.Split Array
题意仅仅是要求分成的小数组里有且仅有k个数字并且连续。那么从头到尾扫一边,每一次都提出一个数字就行了。
#include <bits/stdc++.h>
using namespace std; const int maxn = ;
int n, m, k, a;
int cnt[maxn]; int main() {
// freopen("in", "r", stdin);
int T;
scanf("%d", &T);
while(T--) {
scanf("%d%d",&n,&k);
memset(cnt, , sizeof(cnt));
m = ;
for(int i = ; i <= n; i++) {
scanf("%d", &a);
cnt[a]++;
m = max(m, a);
}
bool flag = ;
for(int i = ; i <= m; i++) {
if(flag == ) break;
if(cnt[i] > ) {
while(cnt[i] > ) {
for(int j = i; j < i + k; j++) {
if(cnt[j] > ) cnt[j]--;
else {
flag = ;
break;
}
}
}
}
}
if(flag) puts("NO");
else puts("YES");
}
return ;
}
hihoCoder太阁最新面经算法竞赛18的更多相关文章
- Hihocoder 太阁最新面经算法竞赛18
Hihocoder 太阁最新面经算法竞赛18 source: https://hihocoder.com/contest/hihointerview27/problems 题目1 : Big Plus ...
- hihoCoder太阁最新面经算法竞赛15
hihoCoder太阁最新面经算法竞赛15 Link: http://hihocoder.com/contest/hihointerview24 题目1 : Boarding Passes 时间限制: ...
- hihocoder Round #c1(hihoCoder太阁最新面经算法竞赛1 )
Test链接:https://cn.vjudge.net/contest/231849 选自hihoCoder太阁最新面经算法竞赛1 更多Test:传送门 A:区间求差 给一组区间集合A和区间集合B, ...
- hihoCoder太阁最新面经算法竞赛19
比赛链接:http://hihocoder.com/contest/hihointerview28/problems A. 固定一个方向,两两相邻的点顺时针或逆时针构造三个向量,判断这个点在这个向量的 ...
- hihoCoder太阁最新面经算法竞赛17
比赛链接:http://hihocoder.com/contest/hihointerview26 A.排序后枚举两个点,确定一个矩形后二分剩下两个点. #include <bits/stdc+ ...
- [HIHO]hihoCoder太阁最新面经算法竞赛7
题目链接:http://hihocoder.com/contest/hihointerview12 期末完事了,终于有时间成套刷题了.这套题比较简单,难度上感觉和上一套差不多.除了最后一个题是看了讨论 ...
- zz 圣诞丨太阁所有的免费算法视频资料整理
首发于 太阁实验室 关注专栏 写文章 圣诞丨太阁所有的免费算法视频资料整理 Ray Cao· 12 小时前 感谢大家一年以来对太阁实验室的支持,我们特地整理了在过去一年中我们所有的原创算法 ...
- [刷题]算法竞赛入门经典 3-12/UVa11809
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...
- [刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍) PS:第一次写博客分享我的代码,不知道我对c ...
随机推荐
- BLOB
BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器.在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型.BLOB是一个大文件,典型的BLOB ...
- Java初始化生命周期
package com.init; abstract class Glyph { void draw() { System.out.println("Glyph.draw()"); ...
- SQLSERVER2012 附加数据库重名的问题
SQL2012附加数据库时如何更改数据库名称呢 方法一: 在“附加为”那一栏填写新的数据库名称就可以 方法二: 使用脚本 附加时点击脚本会自动生成附加脚本 直接修改database的名称即可!
- NSString(或者说是UILabel)加入 “行间距” 之后的 “高度”计算
一.首先,写一个工具类(NSString的分类,增加两个功能,计算高度宽度) #import "NSString+Extension.h" @implementation NSSt ...
- Android-Activity使用(1)
一.添加 activity类 Aty1 继承Activity package activitylc.eoe.cn.l002activieylc; import android.app.Activit ...
- OleContainer控件介绍
OLEContainer 控件的主要属性 1) AllowInPlace property AllowInPlace:Boolean; 这个属性用于决定启动O ...
- AJax 跨域问题
从AJAX诞生那天起,XMLHttprequest对象不能跨域请求的问题就一直存在.这似乎是一个很经典的问题了.是由于javascript的同源策略(这里不作深入探讨)所导致. 解决的办法,大概有如下 ...
- [原创]java WEB学习笔记100:Spring学习---Spring Bean配置:SpEL详细介绍及代码演示
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- boost源码剖析----boost::any
boost源码剖析----boost::any 有的时候我们需要有一个万能类型来进行一些操作,这时候boost::any就派上用场了. boost::Any testInt(10); int val ...
- Redhat 7使用CentOS 7的Yum网络源
由于redhat 的更新包只对注册的用户生效,所以需要自己手动更改成CentOS 的更新包,CentOS几乎和redhat是一样的,所以无需担心软件包是否可安装,安装之后是否有问题,另外CentOS公 ...