The 2014 ACM-ICPC Asia Mudanjiang Regional Contest

题目链接

没去现场。做的网络同步赛。感觉还能够,搞了6题

A:这是签到题,对于A堆除掉。假设没剩余在减一。B堆直接除掉 + 1就能够了

B:二分贪心,二分长度。然后会发现本质上是在树上最长链上找两点,那么有二分出来的长度了,就从两端分别往里移动那么长,那两个位置就是放置位置。然后在推断一下就能够了

D:概率DP。首先知道放一个棋子。能够等价移动到右上角区域,那么就能够dp[x][y][k],表示已经完毕x行y列。已经放了k个棋子,那么棋盘被划分成4个区域。利用这个区域能够算概率,然后去转移就可以

H:字符串处理,先hash掉,记录每一个hash值相应的l,r区间。离线处理完每次询问输出就能够了,注意细节

I:签到题,注意0的时候是等于0就能够了

K:贪心,假设数字个数不够。在前面补是最优的。然后从左往右扫描一遍,每次遇到1个星号要扣掉两个数字,假设没有,这须要交换操作。交换肯定和最后面的数字交换是最优的,最后还要考虑一种特殊情况。就是没有交换,而且最后还有数字,这时候要加入一个星号

代码:

A:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int N = 55;
int t, n, m;int a, b, suma, sumb;int main() {scanf("%d", &t);while (t--) {scanf("%d%d", &n, &m);suma = sumb = 0;for (int i = 0; i < n - 1; i++) {scanf("%d", &a);suma += a;}for (int i = 0; i < m; i++) {scanf("%d", &b);sumb += b;}int l, r;l = suma / (n - 1) - (suma % (n - 1) == 0);r = sumb / m + 1;if (l > r) swap(l, r);printf("%d %d\n", l, r);}return 0;
}

B:

#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;const int N = 200005;struct Edge {int u, v;Edge() {}Edge(int u, int v) {this->u = u;this->v = v;}
} E[N * 2];int first[N], next[N * 2], en;void add_Edge(int u, int v) {E[en] = Edge(u, v);next[en] = first[u];first[u] = en++;
}const int INF = 0x3f3f3f3f;
int t, n, vis[N], f[N], u1, u2, Q[N * 2];int bfs(int root) {int head = 0, rear = 0;vis[root] = 0;Q[rear++] = root;f[root] = 0;int u;while (head < rear) {u = Q[head++];for (int i = first[u]; i + 1; i = next[i]) {Edge e = E[i];int v = e.v;if (vis[v] > vis[u] + 1) {vis[v] = vis[u] + 1;f[v] = u;Q[rear++] = v;}}}return u;
}bool judge(int len) {memset(vis, INF, sizeof(vis));u1 = bfs(1);for (int i = 0; i < len; i++) {if (f[u1] == 0) {u2 = u1 % n + 1;return true;}u1 = f[u1];}memset(vis, INF, sizeof(vis));u2 = bfs(u1);for (int i = 0; i < len; i++) {if (f[u2] == 0) return true;u2 = f[u2];}bfs(u2);for (int i = 1; i <= n; i++)if (vis[i] > len) return false;return true;
}int main() {scanf("%d", &t);while (t--) {en = 0;memset(first, -1, sizeof(first));scanf("%d", &n);int u, v;for (int i = 1; i < n; i++) {scanf("%d%d", &u, &v);add_Edge(u, v);add_Edge(v, u);}if (n == 2) {printf("0 1 2\n");continue;}int l = 0, r = n;while (l < r) {int mid = (l + r) / 2;if (judge(mid)) r = mid;else l = mid + 1;}judge(l);if (u1 == u2) u2 = u2 % n + 1;printf("%d %d %d\n", l, u1, u2);}return 0;
}

D:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int N = 55;
int t, n, m;
double dp[N][N][N * N];int main() {scanf("%d", &t);while (t--) {scanf("%d%d", &n, &m);memset(dp, 0, sizeof(dp));dp[0][0][0] = 1;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {for (int k = max(i, j); k <= i * j; k++) {double p1 = (i * j - (k - 1)) * 1.0;double p2 = (n - i + 1) * j;double p3 = i * (m - j + 1);double p4 = (n - i + 1) * (m - j + 1);dp[i][j][k] = dp[i][j][k - 1] * p1 + dp[i - 1][j][k - 1] * p2 + dp[i][j - 1][k - 1] * p3 + dp[i - 1][j - 1][k - 1] * p4;dp[i][j][k] /= (n * m - (k - 1));}}}double ans = 0;for (int i = max(n, m); i <= n * m; i++)ans += dp[n][m][i] * i - dp[n][m][i - 1] * i;printf("%.12lf\n", ans);}return 0;
}

H:

#include <cstdio>
#include <cstring>
#include <map>
using namespace std;#define MP(a,b) make_pair(a,b)typedef unsigned long long ull;
const ull x = 123;
const int N = 200005;
typedef pair<int, int> pii;char str[N], q[N];
map<ull, pii> g;int t, u, k, lens;int build(ull st) {int flag = 1;while (u < lens) {if (str[u] == '{') {flag = 0;u++;}if (str[u] == '}') {u++;return u;}ull nt = st;while (str[u] != ':' && str[u] != ',' && str[u] != '}')nt = nt * x + str[u++];if (str[u] == ':') {int l = ++u;int r = build(nt * x + '.');g[nt] = MP(l, r);}if (str[u] == '}') {if (!flag)u++;return u;}if (str[u] == ',') {if (flag) return u;u++;}}
}int main() {scanf("%d", &t);while (t--) {u = 0;g.clear();scanf("%s", str);lens = strlen(str);build(0);scanf("%d", &k);while (k--) {scanf("%s", q);ull tmp = 0;int len = strlen(q);for (int i = 0; i < len; i++)tmp = tmp * x + q[i];if (!g.count(tmp)) {printf("Error!\n");continue;}int l = g[tmp].first, r = g[tmp].second;for (int i = l; i < r; i++)printf("%c", str[i]);printf("\n");}}return 0;
}

I:

#include <cstdio>
#include <cstring>
#include <cmath>int t, n;
char str[10];double solve(int x) {if (x == 0) return 0;double sb = x * 1.0 / 100;if (str[0] == 'b') return sb * log2(sb);if (str[0] == 'n') return sb * log(sb);if (str[0] == 'd') return sb * log10(sb);
}int main() {scanf("%d", &t);while (t--) {scanf("%d%s", &n, str);double ans = 0;int x;for (int i = 0; i < n; i++) {scanf("%d", &x);ans += solve(x);}printf("%.12lf\n", -ans);}return 0;
}

K:

#include <cstdio>
#include <cstring>
#include <map>
using namespace std;#define MP(a,b) make_pair(a,b)typedef unsigned long long ull;
const ull x = 123;
const int N = 200005;
typedef pair<int, int> pii;char str[N], q[N];
map<ull, pii> g;int t, u, k, lens;int build(ull st) {int flag = 1;while (u < lens) {if (str[u] == '{') {flag = 0;u++;}if (str[u] == '}') {u++;return u;}ull nt = st;while (str[u] != ':' && str[u] != ',' && str[u] != '}')nt = nt * x + str[u++];if (str[u] == ':') {int l = ++u;int r = build(nt * x + '.');g[nt] = MP(l, r);}if (str[u] == '}') {if (!flag)u++;return u;}if (str[u] == ',') {if (flag) return u;u++;}}
}int main() {scanf("%d", &t);while (t--) {u = 0;g.clear();scanf("%s", str);lens = strlen(str);build(0);scanf("%d", &k);while (k--) {scanf("%s", q);ull tmp = 0;int len = strlen(q);for (int i = 0; i < len; i++)tmp = tmp * x + q[i];if (!g.count(tmp)) {printf("Error!\n");continue;}int l = g[tmp].first, r = g[tmp].second;for (int i = l; i < r; i++)printf("%c", str[i]);printf("\n");}}return 0;
}

The 2014 ACM-ICPC Asia Mudanjiang Regional Contest(2014牡丹江区域赛)相关推荐

  1. 2019-2020 ICPC Asia Xuzhou Regional Contest【徐州现场赛】

    题目: 209-2020 ICPC Asia Xuzhou Regional Onsite Contest E. Multiply 题意: 找到最大的 i 使得 z*x^i 是 y! 的因子 分析: ...

  2. 2016 ACM / ICPC Asia dalian Regional Contest 题解(11 / 11)【每日亿题2021 / 2 / 17】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A .(2017 ACM ICPC dalian H)To begin or not to be ...

  3. 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2017 ICPC shenyang I)Little Boxes B.(2017 ICP ...

  4. 2014 ACM/ICPC Asia Regional Guangzhou Online C题Wang Xifeng's Little Plot(dfs)

    Wang Xifeng's Little Plot Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  5. The 2019 ICPC Asia Shanghai Regional Contest

    The 2019 ICPC Asia Shanghai Regional Contest 题号 题目 知识点 A Mr. Panda and Dominoes B Prefix Code C Maze ...

  6. 2018 ICPC Asia Jakarta Regional Contest

    2018 ICPC Asia Jakarta Regional Contest 题号 题目 知识点 难度 A Edit Distance B Rotating Gear C Smart Thief D ...

  7. 【题目记录】——The 2021 ICPC Asia Jinan Regional Contest

    文章目录 C Optimal Strategy 组合数 H Game Coin K Search For Mafuyu 欧拉序列 题目集地址 The 2021 ICPC Asia Jinan Regi ...

  8. hdu 5023 poj 2777(线段染色)2014 ACM/ICPC Asia Regional 广州 Online

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5023 http://poj.org/problem?id=2777 题意:给出一个长度为N的线段,分 ...

  9. 2014 ACM/ICPC Asia Regional Xi'an Online

    2014西安网络赛 A. Post Robot 把每种单词都kmp跑一遍,顺序输出即可 #include <cstdio> #include <iostream> #inclu ...

最新文章

  1. Hibernate 关联映射 之 多对多 关联(一)
  2. angular 代码高亮_angular 搜索/查找关键字高亮
  3. 《系统集成项目管理工程师》必背100个知识点-63供应商选择
  4. 基于语义嵌入模型与交易信息的智能合约自动分类系统
  5. Android6.0的SMS(短信)源码分析--短信接收
  6. CTFshow——Pwn(1)
  7. C语言试题汇总200例目录
  8. asp.net treeView绑定
  9. 学web前端好找工作吗?想给初学者们几点建议
  10. a算法和a*算法的区别_游戏寻路中 A* 算法的改进
  11. app的证书签名,eclipse的sha1和md5值
  12. python中__future__包
  13. mysql批量插入数据
  14. 在Matlab安装Vlfeat
  15. hping 详解_hping3 使用详解
  16. 计算机网络自顶向下WireShark实验:TCP
  17. 信息安全-移动应用安全需求分析与安全保护工程
  18. STM32入门之GPIO详解
  19. 2021中国华录杯·算法大赛直通车!
  20. [开源]蚂蚁森林自动收能量,自动解锁和自动触发

热门文章

  1. 2018年中国城市用电量30强
  2. 人工智能医疗是把双刃剑,“对抗性攻击”后可导致误判
  3. 梯度下降算法的正确步骤是什么?
  4. 深度学习和普通机器学习之间有何区别?
  5. 人物丨深度学习大神Hinton推翻自己30年的学术成果另造新世界
  6. Tensorflow—交叉熵
  7. 行业观察 | 机器人Ameca挣脱「灵魂」枷锁觉醒?
  8. 一图看清全球270家典型区块链服务商
  9. 生命如何在复杂环境中生存?信息、调控和几何结构的交织
  10. 数学史上的哲学绝唱——无穷观与数学基础的争论