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 ...
随机推荐
- Windows Form 中快捷键设置
在Windows Form程序中使用带下划线的快捷键只需要进行设置: 就能够工作.
- October 10th 2016 Week 42nd Monday
What makes life dreary is the want of motive. 没有了目标,生活便黯然无光. Motive and goal, are absolutely indispe ...
- java Http原生 Get 和Post 支持代理认证
import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import ...
- 数独挑战(codevs 2924)
2924 数独挑战 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description “芬兰数学家因卡拉,花费3 ...
- nfs server的配置 Starting NFS daemon: [FAILED]
总结了一下是nfs server的制作过程:nfs(Network File System)其实就是说,这个机器的硬盘不够了,我要把文件放到别的服务器上去,服务器端的配置如下:首先(1)确保你的机器上 ...
- Android接口传递Json数组的处理方式
public static XTResult<Void> addTravel(String uuid, String travelName, String travelId, String ...
- Jquery.Datatables 导出excel
按钮(Buttons) BUttons v1.1.2 下载地址:http://pan.baidu.com/s/1c0Jhckg JSZip v2.5.0-21-g4fd4fc1 下载地址:http:/ ...
- MySQL 监控
•Table_locks_immediate The number of times that a request for a table lock could be granted immedia ...
- .net学习之委托和事件
1.什么是委托通俗的说:委托就是一个能够存储符合某种格式(方法签名)的方法的指针的容器上传图片: 2.委托语法准备一个方法:string Hello(string userName){} string ...
- CXF学习(4) 处理无法自动转换的复合数据类型
只贴出服务端代码 1.Service接口类 package com.test.hello; import java.util.Map; import javax.jws.WebService; imp ...