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 ...
随机推荐
- 电子现金、电子钱包、qPBOC、闪付、UPCash
一.关于金融IC卡领域的规范 由Europay.Mastercard.Visa三大国际信用卡组织联合制定的金融集成电路(IC)卡金融支付标准,称为EMV规范,其目的是为金融IC卡.金融终端.支付系统以 ...
- August 27th 2016 Week 35th Saturday
Life is a series of commas, not periods. 人生是一系列的逗号,而不是句号. Sometimes I would rather life to be like a ...
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(七) 之 历史记录查询(时间,关键字,图片,文件),关键字高亮显示。
前言 上一篇讲解了如何自定义右键菜单,都是前端的内容,本篇内容就一个:查询.聊天历史纪录查询,在之前介绍查找好友的那篇博客里已经提到过 Elasticsearch,今天它又要上场了.对于Elastic ...
- "稀奇古怪的"delete this
myClass::foo(){ delete this; } .. void func(){ myClass *a = new myClass(); a->foo(); ...
- 常用iOS的第三方框架
图像:1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等 ...
- AJAX 汽车详细信息练习
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- MVC公开课 – 2.查询,删除 (2013-3-15广州传智MVC公开课)
查询 /Controller/HomeController.cs /// <summary> /// 查询 文章 列表 /// </summary> /// <retur ...
- SQL 参数,传入参数和自己申明参数——异常抛出
ALTER PROCEDURE [dbo].[OA_RemoveProject] @Password nvarchar(30), --这是传入的参数 @ProjectNo nvarchar(8) AS ...
- sdut 2498【aoe 网上的关键路径】
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2498 代码超时怎么破: #include< ...
- catch that cow (bfs 搜索的实际应用,和图的邻接表的bfs遍历基本上一样)
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 38263 Accepted: 11891 ...