2013 ACM/ICPC 亚洲区 杭州站
题目链接 2013杭州区域赛
Problem A
Problem B
这题我用的是SPFA+ mask dp
首先跑5次SPFA:
1次是求出每个起点和其他所有点的最短距离
4次是求出每个输入的点和其他所有点的最短距离
然后就是dp
设dp[mask][i]为,mask状态下,以i为终点的最优方案
然后做一遍状压DP即可。
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i) const int N = 103;
const int M = 1e4 + 10;
const int dx[] = {1, 0, -1, 0};
const int dy[] = {0, 1, 0, -1}; bool inqueue[M], fl;
int c[N][N], f[6][6], a[M], d[M], dp[101][6];
char s[N][N];
int cnt, n, m, k;
vector <int> v[M]; inline void addedge(int x, int y){
v[x].push_back(y);
v[y].push_back(x);
} void SPFA(int s){
memset(inqueue, false, sizeof inqueue);
rep(i, 1, cnt) d[i] = 1 << 29;
d[s] = 0;
queue <int> q;
q.push(s); while (!q.empty()){
int x = q.front();
q.pop();
inqueue[x] = false;
for (auto u : v[x]){
if (d[u] > d[x] + 1){
d[u] = d[x] + 1;
if (!inqueue[u]){
inqueue[u] = true;
q.push(u);
}
}
}
}
} int main(){ while (~scanf("%d%d", &n, &m), n + m){
rep(i, 1, n) scanf("%s", s[i] + 1);
cnt = 0;
rep(i, 1, n) rep(j, 1, m) c[i][j] = ++cnt; scanf("%d", &k);
rep(i, 1, n) rep(j, 1, m) if (s[i][j] == '@'){
a[k] = c[i][j];
s[i][j] = '.';
break;
} rep(i, 0, k - 1){
int x, y;
scanf("%d%d", &x, &y);
a[i] = c[x][y];
} rep(i, 0, n * m + 1) v[i].clear(); rep(i, 1, n){
rep(j, 1, m) if (s[i][j] == '.'){
rep(k, 0, 3){
int x = i + dx[k], y = j + dy[k];
if (s[x][y] == '.'){
addedge(c[i][j], c[x][y]);
}
}
}
} SPFA(a[k]); rep(i, 0, k) rep(j, 0, k) f[i][j] = 1 << 29;
rep(i, 0, k){
SPFA(a[i]);
rep(j, 0, k) if (i == j) f[i][j] = 0;
else f[i][j] = d[a[j]];
} rep(i, 0, 53) rep(j, 0, 5) dp[i][j] = 1 << 29;
rep(i, 0, k - 1) dp[1 << i][i] = f[i][k]; rep(i, 1, ((1 << k) - 1)){
if (__builtin_popcount(i) != 1){
rep(j, 0, k - 1) if ((i >> j) & 1){
rep(l, 0, k - 1) if (((i >> l) & 1) && (j != l)){
dp[i][j] = min(dp[i][j], dp[i ^ (1 << j)][l] + f[j][l]);
}
}
}
} int ans = 1 << 30;
rep(i, 0, k - 1) ans = min(ans, dp[(1 << k) - 1][i]);
printf("%d\n", ans < 1e6 ? ans : -1);
} return 0;
}
Problem C
跟着题意模拟一遍
关键是那个旋转要一次性写对
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i) const int N = 41; int a[N][N], b[N][N];
int n;
int ans; void solve(){
int c[N][N]; memset(c, 0, sizeof c);
rep(i, 1, n) rep(j, 1, n) c[i][j] = a[j][n - i + 1];
rep(i, 1, n) rep(j, 1, n) a[i][j] = c[i][j];
} int main(){ while (~scanf("%d", &n), n){
rep(i, 1, n) rep(j, 1, n) scanf("%d", &a[i][j]);
rep(i, 1, n) rep(j, 1, n) scanf("%d", &b[i][j]); ans = 0;
rep(p, 1, 4){
solve();
int now = 0;
rep(i, 1, n) rep(j, 1, n) if (a[i][j] == b[i][j]) ++now;
ans = max(ans, now);
} printf("%d\n", ans);
} return 0;
}
Problem D
Problem E
Problem F
Problem G
Problem H
Problem I
Problem J
Problem K
2013 ACM/ICPC 亚洲区 杭州站的更多相关文章
- 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)
摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...
- 2016 ACM/ICPC亚洲区大连站-重现赛 解题报告
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=5979 按AC顺序: I - Convex Time limit 1000 ms Memory li ...
- 2016 ACM/ICPC亚洲区大连站 F - Detachment 【维护前缀积、前缀和、二分搜索优化】
F - Detachment In a highly developed alien society, the habitats are almost infinite dimensional spa ...
- 2012 ACM/ICPC 亚洲区 金华站
题目链接 2012金华区域赛 Problem A 按a/b从小到大的顺序排队进行体检即可 #include<iostream> #include<cstdio> #inclu ...
- 2016 ACM/ICPC亚洲区青岛站
A B C D E F G H I J K L M O O O O $\varnothing$ $\varnothing$ $\varnothing$ $\varnothing$ ...
- 2016 ACM/ICPC亚洲区沈阳站
A B C D E F G H I J K L M O O O $\varnothing$ $\varnothing$ $\varnothing$ $\varnothing$ $\varnothi ...
- (HDU 5558) 2015ACM/ICPC亚洲区合肥站---Alice's Classified Message(后缀数组)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5558 Problem Description Alice wants to send a classi ...
- 2013ACM/ICPC亚洲区南京站现场赛---Poor Warehouse Keeper(贪心)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4803 Problem Description Jenny is a warehouse keeper. ...
- HDU 5950 Recursive sequence 【递推+矩阵快速幂】 (2016ACM/ICPC亚洲区沈阳站)
Recursive sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
随机推荐
- MySQL写delete语句时不支持表别名
今天写代码时发现了下面一个比较奇怪的问题: 有下面的删除数据的SQL ; 这个sql本来没有问题,但是在MySQL中执行时会报错 ; 原因是 MySQL写delete语句时不支持表别名,困扰了我一会儿 ...
- Choose unique values for the 'webAppRootKey' context-param in your web.xml files! 错误的解决
大意是Log4jConfigListener在获取webapp.root值时,被后一context的值替换掉了,所以要在各个项目的web.xml中配置不同的webAppRootKey值,随即在其中一个 ...
- w3resource_MySQL练习:Basic_select_statement
w3resource_MySQL练习题:Basic_select_statement 1. Write a query to display the names (first_name, last_n ...
- eclipse使用技巧的网站收集——转载(二)
写代码离不开文本编辑器,看代码也离不开,iar和keil编辑和阅读简直一般般了,因此使用eclipse可以看看代码,提高效率.网上有几个博客的文章,这里收集一下,以备忘. 以下文章转载自:http:/ ...
- stm32独立看门狗实验
//ALIENTEK Mini STM32开发板V1.9范例代码5//独立看门狗实验//正点原子@ALIENTEK//技术论坛:www.openedv.com STM32F103RBT6属于中容量版本 ...
- HDU:4185-Oil Skimming
Oil Skimming Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Proble ...
- Solution: 最近公共祖先·一 [hiho一下 第十三周]
题目1 : 最近公共祖先·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho最近发现了一个神奇的网站!虽然还不够像58同城那样神奇,但这个网站仍然让小Ho乐在其中 ...
- Windows和linux(ubuntu)互传文件简便快捷的方法
现在很多开发和测试的工作环境都是Linux,但测试后期报告的处理一般都是在Windows下完成的,所以需要把结果拿到Windows下. 如果是同一台PC还好些(windows下安装linux的虚拟机, ...
- JAVA、JDK等入门概念,下载安装JAVA并配置环境变量
一.概念 Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言,具体介绍可查阅百度JAVA百科,这里不再赘述. Java分为三个体系,分别为: Java SE(J2SE,Java2 Platf ...
- Jquery+Ajax+asp.net+sqlserver-编写的通用邮件管理(有源码)
开始 邮件管理通常用在各个内部系统中,为了方便快捷的使用现有的代码开发一个邮件管理系统而诞生的. 准备条件 这是我的设计表结构,大家一看就懂了 --邮件接收表CREATE TABLE [dbo].[T ...