整理的算法模板合集: ACM模板


这次比赛好多原题呀…(就是那种稍微拓展了一点的原题)

目录

  • A、Easy Equation
  • B、XTL's Chessboard
  • D、Pokemon Ultra Sun
  • E、Eat Walnuts
  • F、wrestling on road
  • H、Nuclear launch detected
  • I 、Character Wheels
  • J、K-th route

A、Easy Equation


题目大意:求x+y+z=kx+y+z=kx+y+z=k的方案数,输入为四个数可取的范围。


前缀和差分。

首先一看数据范围是1e6就不可能O(n2)O(n^2)O(n2)做,只能O(n)O(n)O(n)。

之前做过一道简化版的题,是求x+y=zx+y=zx+y=z的方案数,用的好像是什么前缀和映射思想,我忘了,是CF上面的一次比赛题,但是我找不到了…这里是三个,所以把那个方法拓展一下即可。

实际上用前缀和来解决思路特别简单,大致是一个前缀和+递推DP的思想。

因为有三个数相加的方案数

我们用 f[i] 表示i能够被多少个前两个范围的数(x+y)加起来的方案数,我们直接循环x,那么所有从 xx+b的数都能被这个数递推过去,方案数+1,我们可以直接用前缀和来维护一个区间+1的操作,这样求得 f 数组,然后我们用同样的思路求g数组,其中g[i]表示的是i能够被多少个x+y+z的方案数,同样的我们维护一个前缀和差分,再求一次前缀和就是所有能通过x+y+z得到这个数的方案数,我们直接枚举所有d的范围,求和既是答案。

一个小插曲

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>using namespace std;const int N = 1e8 + 7, M = 5000007, INF = 0x3f3f3f3f;long long a, b, c, d;
long long f[N];
long long g[N];int main()
{scanf("%lld%lld%lld%lld", &a, &b, &c, &d);for(int i = 0; i <= a; ++ i){f[i] ++ ;f[i + b + 1] -- ;}for(int i = 1; i <= a + b; ++ i)f[i] += f[i - 1];for(int i = 0; i <= a + b; ++ i){g[i] += f[i];g[i + c + 1] -= f[i] ;}for(int i = 1 ;i <= a + b + c; ++ i)g[i] += g[i - 1];long long ans = 0;for(int i = 0; i <= d; ++ i)ans += g[i];printf("%lld\n", ans);return 0;
}

B、XTL’s Chessboard



题目大意:弹弹弹


SB题,直接输出2就行了,因为所有的点沿着45度角射出反弹最后都会回到起点,x-1和y-1互质的时候一定会经过角,就会直接反弹原路返回。所以只有起点和终点经过奇数次,答案就是2。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>using namespace std;const int N = 500007, M = 5000007, INF = 0x3f3f3f3f;int n, m, t;
int a[N], b[N];
bool vis[N];
int ans;int main()
{int x, y;while(scanf("%d%d%d%d", &n, &m, &x, &y) != EOF && n + m){printf("2\n");}return 0;
}

D、Pokemon Ultra Sun


题目大意:宝可梦们大战,你和对手都有一个血量,每一轮都是你打对手,攻击力为w,每次有p的概率对手掉血,1-p的概率你自己掉血,求比赛轮数的期望。


概率DP板子题…

我们用 f[i][j] 表示我方掉i血敌方掉j血的期望。
然后直接输出即可。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>using namespace std;const int N = 3507, M = 5000007, INF = 0x3f3f3f3f;int n, m, t;
int hp1, hp2, w;
double f[N][N];
double p;int main()
{scanf("%d", &t);while(t -- ){scanf("%d%d%d%lf", &hp1, &hp2, &w, &p);memset(f, 0, sizeof f);for(int i = 1; i <= hp1; ++ i){for(int j = 1; j <= hp2; ++ j){f[i][j] = f[max(0, i - w)][j] * (1 - p) + f[i][max(0, j - w)] * p + 1.0;}}printf("%.6f\n", f[hp1][hp2]);}return 0;
}

E、Eat Walnuts


题目大意:一排的核桃,你每次可以从连续的三个中拿走中间的那一个,花费为a[i - 1] * a[i] * a[i + 1],求拿的只剩下两个核桃的最小花费。


其实就是一道区间DP的板子题,之前有一道最优矩阵链乘的题,几乎一摸一样。只不过计算方法改了一点。主要是这里需要至少三个核桃才能拿走一个,所以我们需要规定长度至少为3,然后初始化的时候应该初始化f[i][i] = 0; f[i][i + 1] = 0;,而最优矩阵链乘中两个数表示两个矩阵,所以初始条件和长度不一样,区间DP需要考虑边界,可转移长度,最后才是转移方程。

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<cstring>using namespace std;
typedef long long ll;
const int N = 2007, M = 5000007, INF = 0x3f3f3f3f;int n, m;
int f[N][N];
int a[N];int main()
{while(scanf("%d", &n) != EOF && n){memset(f, 0x3f, sizeof f);for(int i = 1; i <= n; ++ i){scanf("%d", &a[i]);f[i][i] = 0;f[i][i + 1] = 0;}for(int len = 2; len <= n; ++ len){for(int i = 1; i <= n - len + 1; ++ i){int j = i + len - 1;for(int k = i + 1; k < j; ++ k)f[i][j] = min(f[i][j], f[i][k] + f[k][j] + (a[i] + a[k] + a[j]) * (a[i] + a[k] + a[j]));}}printf("%d\n", f[1][n]);}return 0;
}

F、wrestling on road


题目翻译 ♂

Banana先生和Kazuya先生是新日暮里的著名哲学家。新日暮里的国王范(Van)无法在没有他们的情况下管理帝国,因此他将左右监护人的头衔赋予他们。

由于政治上的差异,他们处于相反的立场。新日暮里每天都有早会,范需要设计两条路线,以便香蕉先生和和也雅先生可以参加早会。使事情变得难以管理的是,如果一条道路(不包括两个终点)既属于香蕉先生的道路又属于Kazuya的道路,那么它们将相互搏斗。

一般而言,新日暮里由n个城市和m条没有自环的双向道路组成,最多有一条道路连接任何两个城市。Banana先生居住在1号城市,Kazuya先生居住在2号城市。n和n − 1城市有两个豪华轿车,他们应该参加早上的会议。更正式地:

如果道路在香蕉先生的路线上,那么它就不能可以在和Kazuya的路线上,反之亦然。(也就是他们的路线不能有交叉)

如果Banana先生应该在n城市使用豪华轿车,而Kazuya应该在n-1城市使用豪华轿车。(也就是

第 45 届国际大学生程序设计竞赛(ICPC)亚洲网上区域赛模拟赛 题解(除了C、G之后补)相关推荐

  1. 第45届国际大学生程序设计竞赛(ICPC)银川站太原理工大学收获4枚奖牌

    第45届国际大学生程序设计竞赛(ICPC)银川站,由宁夏理工学院承办,于2021年5月15-16日在宁夏的石嘴山市进行. 太原理工大学在比赛中获得2银2铜共4枚奖牌的好成绩. 参加本次比赛的四个队,涵 ...

  2. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)(重现赛)

    第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)(重现赛) 导语 涉及的知识点 题目 C D G J M 参考文献 导语 日常的队内集训,开始的时候状态其实很好,但是到了后两题就出现了 ...

  3. 第45届国际大学生程序设计竞赛(ICPC)沈阳站太原理工大学收获1枚铜牌

    第45届ICPC沈阳区域赛,于2021年7月18日在东北大学南湖校区举行.太原理工大学2个队参加比赛,由20级中学没有学过编程的3名同学组成的队,首次参加现场赛并获得铜奖.

  4. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明),签到题HIL

    H. Hard Calculation 链接:https://ac.nowcoder.com/acm/contest/12548/H 来源:牛客网 题目描述 Hooray! It is the fir ...

  5. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京)签到题K Co-prime Permutation,L Let‘s Play Curling

    序 emmm因为没时间补题(虽然签到有四题),所以只能先放两个签到. 这是比赛链接:https://ac.nowcoder.com/acm/contest/10272 这是题解链接:2020年ICPC ...

  6. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲网上区域赛模拟赛 B.XTL‘s Chessboard(思维)

    题目链接:https://ac.nowcoder.com/acm/contest/8688/B 题目描述 Xutianli is a perfectionist, who only owns &quo ...

  7. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明),签到题4题

    文章目录 H. Hard Calculation I. Mr. Main and Windmills L. Simone and graph coloring J.Parallel Sort 补题链接 ...

  8. 【第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛】Simone and Graph Coloring

    #include <bits/stdc++.h> using namespace std; const int maxn = 1000005, INF = 0x7f7f7f7f; int ...

  9. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) AC(带悔贪心)

    下面两个题都是选择iii有个价值如果选择iii则不能选择i−1,i+1i-1,i+1i−1,i+1,让价值最大或最小 P1792 [国家集训队]种树 野心qwq 的博客 #include<bit ...

最新文章

  1. webview检测html事件,在JavaFX WebView中检测HTML textarea onkeyup事件
  2. Spring Cloud Alibaba:Sentinel 熔断降级
  3. Date类(日期时间类)219
  4. 基于维特比算法的概率路径
  5. Arcgis Engine矢量裁剪栅格,调用Mask工具相关代码
  6. 从零开始学前端:链接跳转 --- 今天你学习了吗?(CSS:Day03)
  7. Oracle 命名服务和监听程序
  8. linux java串口读写权限_解决linux下java读取串口之权限问题 No permission to create lock file. | 学步园...
  9. 目标检测——主干网络backbone的测试方法
  10. 全国python一级考试_关于全国青少年软件编程(Python)等级考试试卷(一级)测试卷情况网络调研...
  11. ERROR 1044 (42000): Access denied for user ''@'...
  12. html5学习笔记6-- canvas
  13. linux 搭建webserver-BOA
  14. iptables详解(图文)
  15. Win10如何修改外接显示器分辨率
  16. EMERGENCYEUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEYRE NOT
  17. 小程序调用服务器图片错误,微信小程序列表图片加载错误处理
  18. wps自动插入文献_WPS中怎样自动生成参考文献?方法超级简单!
  19. 如何使用真机测试运行HarmonyOS应用
  20. 基于光栅波导结构的 R ARMR 系统的 建模

热门文章

  1. 基于OpenCV提取特定区域
  2. 【干货小铺】各种编程语言的深度学习库整理
  3. 视觉SLAM如何基于深度学习闭环检测?
  4. OpenCV | 二值图像分析的技巧都在这里
  5. 任务调度器leetcode621
  6. (十二)企业级java springcloud b2bc商城系统开源源码二次开发-断路器监控(Hystrix Dashboard)...
  7. gluoncv 训练自己的数据集,进行目标检测
  8. 如何查找Authorization object在哪些ABAP代码里使用到
  9. hdu-1847-畅桶工程续
  10. Win7:“找不到该项目”错误解决大法