比赛链接: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的更多相关文章

  1. Hihocoder 太阁最新面经算法竞赛18

    Hihocoder 太阁最新面经算法竞赛18 source: https://hihocoder.com/contest/hihointerview27/problems 题目1 : Big Plus ...

  2. hihoCoder太阁最新面经算法竞赛15

    hihoCoder太阁最新面经算法竞赛15 Link: http://hihocoder.com/contest/hihointerview24 题目1 : Boarding Passes 时间限制: ...

  3. hihocoder Round #c1(hihoCoder太阁最新面经算法竞赛1 )

    Test链接:https://cn.vjudge.net/contest/231849 选自hihoCoder太阁最新面经算法竞赛1 更多Test:传送门 A:区间求差 给一组区间集合A和区间集合B, ...

  4. hihoCoder太阁最新面经算法竞赛18

    比赛链接:http://hihocoder.com/contest/hihointerview27/problems A.Big Plus 模拟水 #include <bits/stdc++.h ...

  5. hihoCoder太阁最新面经算法竞赛17

    比赛链接:http://hihocoder.com/contest/hihointerview26 A.排序后枚举两个点,确定一个矩形后二分剩下两个点. #include <bits/stdc+ ...

  6. [HIHO]hihoCoder太阁最新面经算法竞赛7

    题目链接:http://hihocoder.com/contest/hihointerview12 期末完事了,终于有时间成套刷题了.这套题比较简单,难度上感觉和上一套差不多.除了最后一个题是看了讨论 ...

  7. zz 圣诞丨太阁所有的免费算法视频资料整理

    首发于 太阁实验室 关注专栏   写文章     圣诞丨太阁所有的免费算法视频资料整理 Ray Cao· 12 小时前 感谢大家一年以来对太阁实验室的支持,我们特地整理了在过去一年中我们所有的原创算法 ...

  8. [刷题]算法竞赛入门经典 3-12/UVa11809

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...

  9. [刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍) PS:第一次写博客分享我的代码,不知道我对c ...

随机推荐

  1. docker 使用非加密registry

    配置docker成为服务,自启动 sudo systemctl enable docker.service 启动服务 sudo systemctl start docker docker默认要求我们使 ...

  2. 【转载】说说JSON和JSONP,也许你会豁然开朗,含jQuery用例

    前言: 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可 ...

  3. node.js表单——formidable/////z

    node.js表单--formidable   node处理表单请求,需要用到formidable包.安装formidable包的命令如下: npm install formidable 安装pack ...

  4. java类

    1.四种访问控制符 private.不指明.protected.public 2.构造函数没有返回值 是因为构造函数默认返回的是类的实例对象.所以不需要写返回值 3.static static表示类拥 ...

  5. 用于基于 RPM 的 Linux 平台的 Java

    成为超级用户,方法是运行 su 并输入超级用户口令. 卸载任何之前安装的 Java 程序包. rpm -e package_name 切换到所需的安装目录.键入:cd directory_path_n ...

  6. Ubuntu下安装Docker

    1. 安装前先检查系统对docker的支持,尽可能安装高版本的系统,比如Ubuntu14.04等,安装前可以先检查系统信息. Docker需要64位机器,需要运行在3.8以上的内核上,需要操作系统支持 ...

  7. CSS盒子模型元素实际宽度的计算

    一旦为页面设置了恰当的 DTD,大多数浏览器都会按照上面的图示来呈现内容.然而 IE 5 和 6 的呈现却是不正确的.根据 W3C 的规范,元素内容占据的空间是由 width 属性设置的,而内容周围的 ...

  8. 像Maven一样构建java项目的目录,更好的管理java工程的源码

    都知道maven具有管理Java或者Javaweb的功能.我个人尤其看中的是其代码层次的分离.不同的代码在不同的文件夹下.这是在eclipse新建一个普通的工程无法实现的.而如果用maven实现有时候 ...

  9. c# 如何隐藏TabControl控件的标签

    http://www.cnblogs.com/chenleiustc/archive/2009/11/25/1527813.html 方法一:将标签缩小到机会看不到:设置页面的大小模式会自动适合(会尽 ...

  10. GridView的高度自适应

    接着上面一篇文章. 当GridView不知道parent高度的时候,也就是MeasureSpec是UNSPECIFIED,这个时候,GridView高度为第一个child的高度,并显示滚动条. mIt ...