比赛链接: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. SpringMVC原理解析-Servlet容器启动时初始化SpringMVC应用的原理

  2. 批处理ODBC配置

    工作需要来回切换ODBC配置,用同一个DSN名称访问不同的数据库. 对于linux的odbc配置在odbc.ini文件里,替换不同的文件就可以切换了. 而windows的配置一直通过控制面板里的odb ...

  3. pip安装

    首先安装 python 和python-devel 然后 https://pypi.python.org/pypi/pip/ 下载 tar.gz 解压,安装 tar zxvf pip-8.1.1.ta ...

  4. UIBUTTON titlelabel.text 不显示

    button.titlelabel.text=@"查询";设置后运行发现没事正确显示. 查找后原来UIButton分状态的,textLabel不管用 [button setTitl ...

  5. sql server 数据库 日期格式转换

    日期时间转字符串:Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM Select CONVERT(varchar(100), ...

  6. android 使用shape来优化界面效果

    看下效果图: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android=&quo ...

  7. java实现二分查找

    /** * 二分查找 * @param a * @param n * @param value * @return * @date 2016-10-8 * @author shaobn */ publ ...

  8. 第一次链接Azure,固定实例内部IP(DIP)

    下载web pi 下载Azure powershell 打开 Poweshell ISE 输入 Get-AzurePublishSettingsFile -Environment "Azur ...

  9. Web 播放声音(AMR 、WAVE)

    最近甚是苦闷,属于边学边做,跳进了很多坑,别提有多惨了,不过结果还是不错滴,纵观前后,一句话足以概括 “痛并快乐着” ~~~ ok,我少说废话,下面来总结下 Web 播放声音一些注意事项. 说到 We ...

  10. htm5l,第一个script代码练习

    <body>    <canvas id="mycanvas" width="500" height="300">  ...