BestCoder Round #74 (div.2)
组合 1001 LCP Array
第一题就小难,出题的好像是浙大的大牛?
找到一个规律:a[i] = x, s[i..i+x]都想同。a[i] = a[i+1] + 1 (a[i] > 0),否则就是与后一个颜色不同,方案*25。第一次颜色相同的26种方案。
#include <bits/stdc++.h> typedef long long ll;
const int N = 1e5 + 5;
const int MOD = 1e9 + 7;
int a[N]; int main() {
int T; scanf ("%d", &T);
while (T--) {
int n; scanf ("%d", &n);
for (int i=1; i<n; ++i) {
scanf ("%d", a+i);
}
a[n] = 0;
int ans = 26;
for (int i=n-1; i>=1; --i) {
if (a[i] == 0) {
ans = 1ll * ans * 25 % MOD;
} else if (a[i] != a[i+1] + 1) {
ans = 0;
break;
}
}
printf ("%d\n", ans);
} return 0;
}
最短路 1002 Shortest Path
多加了3条边,6个点分别看成起点跑SPFA,然后原来的距离是abs (u - v),取最小值
#include <bits/stdc++.h> const int N = 1e5 + 5;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
int a[6], d[6][N], z[N];
bool vis[N];
std::vector<int> G[N];
int n, m; void add_edge(int u, int v) {
G[u].push_back (v);
G[v].push_back (u);
} void SPFA(int k, int s) {
memset (d[k], INF, sizeof (d[k]));
memset (vis, false, sizeof (vis));
d[k][s] = 0; vis[s] = true;
std::queue<int> que; que.push (s);
while (!que.empty ()) {
int u = que.front (); que.pop ();
for (auto v: G[u]) {
if (vis[v]) continue;
d[k][v] = d[k][u] + 1;
vis[v] = true;
que.push (v);
}
}
} int main() {
int T; scanf ("%d", &T);
while (T--) {
scanf ("%d%d", &n, &m);
for (int i=1; i<=n; ++i) {
G[i].clear ();
}
for (int i=1; i<n; ++i) {
add_edge (i, i+1);
}
for (int i=0; i<3; ++i) {
int u, v; scanf ("%d%d", &u, &v);
add_edge (u, v);
a[i*2] = u; a[i*2+1] = v;
}
for (int i=0; i<6; ++i) {
SPFA (i, a[i]);
}
for (int i=0; i<m; ++i) {
int u, v; scanf ("%d%d", &u, &v);
if (u > v) std::swap (u, v);
int &best = z[i];
best = v - u;
for (int i=0; i<6; ++i) {
best = std::min (best, d[i][u] + d[i][v]);
}
}
int ans = 0;
for (int i=0; i<m; ++i) {
ans = (ans + 1ll * (i + 1) * z[i]) % MOD;
}
printf ("%d\n", ans);
} return 0;
}
二进制 + BFS 1003 Transform
s -> t = s ^ t = x,所以要预处理出0到x的最小步骤,翻转某一位可以转换为^ (1<<i)
#include <bits/stdc++.h> const int N = 30;
const int MAX = (1 << 17);
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
int a[N], d[MAX];
bool vis[N];
int n, m; void BFS(int s) {
std::queue<int> que; que.push (s);
memset (d, INF, sizeof (d)); d[s] = 0;
while (!que.empty ()) {
int x = que.front (); que.pop ();
for (int i=1; i<=n; ++i) {
int y = x ^ a[i];
if (y > MAX) break;
if (d[y] < INF) continue;
d[y] = d[x] + 1;
que.push (y);
}
}
} int main() {
int T; scanf ("%d", &T);
while (T--) {
scanf ("%d%d", &n, &m);
a[0] = 0;
for (int i=1; i<=n; ++i) {
scanf ("%d", a+i);
}
int k = 0;
for (int k=0; k<100; ++k) {
int x = 1 << k;
if (x > MAX) break;
a[++n] = x;
}
BFS (0);
int ans = 0;
for (int i=0; i<m; ++i) {
int s, t; scanf ("%d%d", &s, &t);
int q = s ^ t;
ans = (ans + 1ll * (i + 1) * d[q]) % MOD;
}
printf ("%d\n", ans);
} return 0;
}
1004 Toposort
待补
BestCoder Round #74 (div.2)的更多相关文章
- hdu5635 BestCoder Round #74 (div.2)
LCP Array Accepts: 131 Submissions: 1352 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 13 ...
- hdu 5636 搜索 BestCoder Round #74 (div.2)
Shortest Path Accepts: 40 Submissions: 610 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: ...
- hdu 5637 BestCoder Round #74 (div.2)
Transform Accepts: 7 Submissions: 49 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072 ...
- BestCoder Round #74 (div.1) 1002Shortest Path(hdoj5636)
哈哈哈哈,我就知道这道题目再扔给我,我还是不会,就是这么菜,哈哈哈 一开始官方题解就没搞懂-然后就看了一下别人的代码,水水过就算了.今天拿到-GG: 题意: 一开始,有一张原图,有一条长度为n的链. ...
- HDU5638 / BestCoder Round #74 (div.1) 1003 Toposort 线段树+拓扑排序
Toposort 问题描述 给出nn个点mm条边的有向无环图. 要求删掉恰好kk条边使得字典序最小的拓扑序列尽可能小. 输入描述 输入包含多组数据. 第一行有一个整数TT, 表示测试数据组数. 对 ...
- hdu5634 BestCoder Round #73 (div.1)
Rikka with Phi Accepts: 5 Submissions: 66 Time Limit: 16000/8000 MS (Java/Others) Memory Limit: ...
- BestCoder Round #69 (div.2) Baby Ming and Weight lifting(hdu 5610)
Baby Ming and Weight lifting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
- BestCoder Round #68 (div.2) tree(hdu 5606)
tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- BestCoder Round #11 (Div. 2) 题解
HDOJ5054 Alice and Bob Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
随机推荐
- asp.net 曲线图
public void draw(DataTable dt) { //取得记录数量 int count = dt.Rows.Count; //记算图表宽度 int wd = 80 + 20 * (co ...
- HttpClient 3.X 4.3 4.x超时设置
HttpClient 4.3.HttpClient这货和Lucene一样,每个版本的API都变化很大,这有点让人头疼.就好比创建一个HttpClient对象吧,每一个版本的都不一样, 3.X是这样的 ...
- grep(Global Regular Expression Print)
.grep -iwr --color 'hellp' /home/weblogic/demo 或者 grep -iw --color 'hellp' /home/weblogic/demo/* (-i ...
- C++异常层次结构图
- 4.1 pair类模板
在学习关联容器之前,首先先要了解一下STL中的pair类模板,因为关联容器的一些成员函数返回值都是pair对象,而且map 和multimap中的元素都是pair对象. 1)pair类模板定义 pai ...
- python字符串中插入变量
- HTTP/1.1 中 If-Modified-Since 和 If-Unmodified-Since 区别简记
接触HTTP/1.1的时日还不多, 有时候看着这两个参数老是有点混淆, 今天终于理清了, 现记录下. 初学网络, 若有理解不对, 还请拍砖. If-Modified-Since: 从字面上看, ...
- POJ3691 DNA repair(AC自动机 DP)
给定N个长度不超过20的模式串,再给定一个长度为M的目标串S,求在目标串S上最少改变多少字符,可以使得它不包含任何的模式串 建立Trie图,求得每个节点是否是不可被包含的串,然后进行DP dp[i][ ...
- SQL常用方言列表
DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS390 org.hi ...
- 基于PHP+Ajax实现表单验证的详解
一,利用键盘响应,在不刷新本页面的情况下验证表单输入是否合法 用户通过onkeydown和onkeyup事件来触发响应事件.使用方法和onclick事件类似.onkeydown表示当键盘上的键被按下时 ...