hihoCoder太阁最新面经算法竞赛19
比赛链接:http://hihocoder.com/contest/hihointerview28/problems
A. 固定一个方向,两两相邻的点顺时针或逆时针构造三个向量,判断这个点在这个向量的左侧还是右侧,看看是否在同一侧。trick就是点在向量上,对应的情况就是值为0.
def do(p1x, p1y, p2x, p2y, p3x, p3y):
return (p3x - p1x) * (p2y - p1y) - (p2x - p1x) * (p3y - p1y); T = map(int, raw_input().split(' '))[0]
while T > 0:
T -= 1
px, py, ax, ay, bx, by, cx, cy = map(int, raw_input().split(' '))
x, y, z = do(ax, ay, px, py, bx, by), do(bx, by, px, py, cx, cy), do(cx, cy, px, py, ax, ay)
if (x >= 0 and y >= 0 and z >= 0) or (x <= 0 and y <= 0 and z <= 0):
print 'YES'
else:
print 'NO'
B.打表规律,发现<=16的时候可以暴搜,>16的时候f(n)=4*f(n-5)(?如果没记错的话),矩阵加速一下就行了。
#include <bits/stdc++.h>
using namespace std; typedef long long LL;
const LL mod = 1000000007LL;
const int maxn = ;
LL n;
LL ret; typedef struct Matrix {
LL m[maxn][maxn];
int r;
int c;
Matrix() {
r = c = ;
memset(m, , sizeof(m));
}
} Matrix; Matrix mul(Matrix m1, Matrix m2, LL mod) {
Matrix ans = Matrix();
ans.r = m1.r;
ans.c = m2.c;
for(int i = ; i <= m1.r; i++) {
for(int j = ; j <= m2.r; j++) {
for(int k = ; k <= m2.c; k++) {
if(m2.m[j][k] == ) continue;
ans.m[i][k] = ((ans.m[i][k] + m1.m[i][j] * m2.m[j][k] % mod) % mod) % mod;
}
}
}
return ans;
} Matrix quickmul(Matrix m, LL n, LL mod) {
Matrix ans = Matrix();
for(int i = ; i <= m.r; i++) {
ans.m[i][i] = ;
}
ans.r = m.r;
ans.c = m.c;
while(n) {
if(n & ) {
ans = mul(m, ans, mod);
}
m = mul(m, m, mod);
n >>= ;
}
return ans;
} void dfs(LL n, LL cur, LL sz) {
if(n == ) {
ret = max(ret, cur);
return;
}
if(n >= ) dfs(n-,cur*%mod, cur);
if(n >= && sz) dfs(n-, (cur+sz)%mod, sz);
dfs(n-,(cur+)%mod, sz);
} int main() {
// freopen("in", "r", stdin);
while(cin >> n) {
if(n < ) {
ret = ;
dfs(n, , );
cout << ret << endl;
continue;
}
Matrix x; x.r = , x.c = ;
x.m[][] = , x.m[][] = , x.m[][] = , x.m[][] = , x.m[][] = ;
Matrix p; p.r = p.c = ;
memset(p.m, , sizeof(p.m));
p.m[][] = ;
for(int i = ; i <= ; i++) p.m[i][i-] = ;
p = quickmul(p, n-, mod);
p = mul(p, x, mod);
cout << p.m[][] << endl;
}
return ;
}
C.对于trie上的每个节点u,求最小的整数x满足 节点u对应的字符串(trie上root->u的路径) 是 S[1..x]的子序列。
#include <bits/stdc++.h>
using namespace std; const int maxn = ;
const int maxm = ;
const int maxc = ; typedef pair<int, int> pii;
typedef struct Trie {
int rt, sz;
int id[maxm][maxc], val[maxm];
int dp[maxm];
string s;
void build() {
rt = sz = ;
memset(dp, , sizeof(dp));
memset(id, -, sizeof(id));
memset(val, , sizeof(val));
}
void insert(const char* str) {
int u = rt;
int n = strlen(str);
for(int i = ; i < n; i++) {
int v = str[i] - 'a';
if(id[u][v] == -) id[u][v] = ++sz;
u = id[u][v];
}
val[u] = max(val[u], n);
}
void dfs(int x, int u) {
if(x == s.length()) return;
for(int i = ; i < ; i++) {
int &v = id[u][i];
if(v == -) continue;
int y = x;
while(s[y] != i + 'a' && y < s.length()) y++;
if(y == s.length()) break;
if(i + 'a' == s[y]) {
dp[v] = dp[u] + ;
dfs(y+, v);
}
}
}
}Trie; int n;
char tmp[maxm];
Trie trie; int main() {
// freopen("in", "r", stdin);
while(~scanf("%d", &n)) {
trie.build();
for(int i = ; i < n; i++) {
scanf("%s", tmp);
trie.insert(tmp);
}
scanf("%s", tmp);
trie.s = tmp;
trie.dfs(, );
int ret = ;
for(int i = ; i <= trie.sz; i++) {
// printf("%d %d\n", trie.dp[i], trie.val[i]);
if(trie.dp[i] != ) {
ret = max(ret, trie.val[i]);
}
}
printf("%d\n", ret);
}
return ;
}
hihoCoder太阁最新面经算法竞赛19的更多相关文章
- 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太阁最新面经算法竞赛18
比赛链接:http://hihocoder.com/contest/hihointerview27/problems A.Big Plus 模拟水 #include <bits/stdc++.h ...
- 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 ...
随机推荐
- CSS4
1.处理溢出(overflow) overflow的取值可以是visible.hidden,scroll,auto,其中visible是默认值.visible表示不裁剪内容,也不添加滚动条,强制显示元 ...
- 添加右键菜单命令 在此处打开命令窗口(E)(带图标)
@color 0A @title 添加右键菜单命令 在此处打开命令窗口(^&E)(带图标) by wjshan0808 @echo off reg add HKCR\Directory\Bac ...
- [转]彻底征服 Spring AOP 之 实战篇
Spring AOP 实战 看了上面这么多的理论知识, 不知道大家有没有觉得枯燥哈. 不过不要急, 俗话说理论是实践的基础, 对 Spring AOP 有了基本的理论认识后, 我们来看一下下面几个具体 ...
- UML基本介绍
用例图: 概念:描述用户需求,从用户的角度描述系统的功能,是用户拨通观察到的系统功能的模型图,用例是系统中的一个功能单元. 实现:椭圆表示某个用例:人形符号表示角色. 目的:帮助开发团队以一种可视化的 ...
- (一)GPIO 编程实验 LED 流水灯控制
7个寄存器 是R1-R16.(当然,里面有很多是分几个模式的,所以总共有37个)类似于单片机的R0-R7. GPXCON,GPXDAT等等是另外的寄存器,应该叫,特殊功能寄存器,类似于单片机的P0,P ...
- Base64 的那些事儿
一.Base64是什么? Base64是一种编码的格式.是将信息流(字节流)按照一定的规范,重新组合,显示出完全不相关内容的编码格式. ps.定义是我自己总结的,我觉得对于知识的定义,只要简洁,不错误 ...
- node 实现视频播放后端,前端使用video标签,视频文件视频mp4
var fs = require("fs"), http = require("http"), url = require("url"), ...
- Java开发环境的配置与Hello World
一.Java开发需要做的准备 Java程序的执行过程是首先由Java编译器将以.java为后缀的Java源文件编译成.class字节码文件.然后字节码文件便可以由JVM虚拟机进行加载并执行. 在初学J ...
- 在Ubuntu上安装有道词典
4月20日,由有道词典和Deepin团队共同完成的有道词典Linux版终于上线了,首先 推出Deepin和Ubuntu两个系统版本及其他版本的二进制包,估计以后还会有RPM 等版本.有道Linux版界 ...
- DKIM对发送邮件的好处及使用方法
关于DKIM: What is DKIM? 简单的来说dkim有益于增加邮件服务供应商中的反垃圾邮件系统评分,减少邮件内容被评为垃圾邮件的概率. 但使用它不等同于不会被评为垃圾邮件.另外,邮件的发送次 ...