UNIQUE VISION Programming Contest 2022(AtCoder Beginner Contest 248)C~D 题解

C - Dice Sum

题目大意

有多少个整数序列\(A=(A_1,\dots,A_N)\)符合如下条件:

  • \(1\le A_i\le M\)
  • \(\sum\limits_{i=1}^NA_i\le K\)

输出答案,对\(998244353\)取模。

\(1\le N,M\le 50\)
\(N\le K\le NM\)

输入格式

\(N~M~K\)

输出格式

输出答案,对\(998244353\)取模。

分析

艹C题又要dp
考虑\(\text{DP}\)思想,令\(\text{dp}(i,j):=A\)的前\(i\)个元素中和为\(j\)的总可能数(\(1\le A_x\le M\)),则可得伪代码:

dp[0][0] = 1
for i = 0 to N-1 // 逐个位置考虑for j = 0 to K-1 // 考虑所有和的情况,无需考虑Kfor k = 1 to M // 1-M的每个选择if j + k <= K: // 限制条件dp[i + 1][j + k] += dp[i][j] // 更新dp[i+1]

时间复杂度为\(\mathcal O(NMK)\),可以通过

其实还可以利用前缀和优化
不难发现\(\mathrm{dp}(i,j)=\displaystyle\sum_{k=L}^R\text{dp}(i-1,k)\)
其中\(L\le R\),具体的值请自行推导。
因此,我们可以记录\(\mathrm{dp}[i-1]\)的前缀和\(\mathrm{pre}\)

  • \(\mathrm{pre}_j=\displaystyle\sum_{k=1}^j\mathrm{dp}(i-1,k)\)

\(\mathrm{dp}(i,j)=\mathrm{pre}_R-\mathrm{pre}_{L-1}\)
因此,时间复杂度为\(\mathcal O(NK)\)
强烈建议读者独立推导并实现该方法。 前缀和优化\(\text{DP}\)的算法在E、F题中很常见。

代码

#include <cstdio>
#define MOD 998244353
#define maxn 200005
using namespace std;inline void mod(int& x) { if(x >= MOD) x -= MOD; }
int dp[2][maxn];int main()
{int n, m, k;scanf("%d%d%d", &n, &m, &k);dp[0][0] = 1;for(int i=0; i<n; i++){int c = i & 1, p = c ^ 1;for(int j=0; j<=k; j++)dp[p][j] = 0;for(int j=0; j<k; j++)for(int d=1; d<=m && d<=k-j; d++)mod(dp[p][j + d] += dp[c][j]);}int ans = 0;for(int i=1; i<=k; i++)mod(ans += dp[n & 1][i]);printf("%d\n", ans);return 0;
}

D - Range Count Query

题目大意

给定整数序列\(A=(A_1,\dots,A_N)\)
\(Q\)个查询。每个查询的格式如下:

  • 给定三个整数\(L,R,X\),求\(A_L,\dots,A_R\)\(X\)的出现次数。

\(1\le A_i,X\le N\le 2\times10^5\)
\(1\le L\le R\le N\)

输入格式

\(N\)
\(A_1~\dots~A_N\)
\(Q\)
\(L_1~R_1~X_1\)
\(\vdots\)
\(L_Q~R_Q~X_Q\)

输出格式

输出\(Q\)行,第\(i\)行是第\(i\)个查询的答案。

分析

题目换句话说就是:求\(X\)出现的位置中,在\([L,R]\)区间内的有多少个?
因此,我们很容易想到先预处理\(1,\dots,N\)中每个数出现的位置,存入vector,查询时二分即可。

代码

注意二分边界。

#include <cstdio>
#include <vector>
#include <algorithm>
#define maxn 200005
using namespace std;vector<int> pos[maxn];int main()
{int n, q;scanf("%d", &n);for(int i=0; i<n; i++){int a; scanf("%d", &a);pos[a].push_back(i);}scanf("%d", &q);while(q--){int l, r, x;scanf("%d%d%d", &l, &r, &x);printf("%d\n", int(lower_bound(pos[x].begin(), pos[x].end(), r) -lower_bound(pos[x].begin(), pos[x].end(), --l)));}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/794193.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AtCoder Beginner Contest 252 A~G 题解

前言这是我第一次写7题(A~G)的ABC题解,若有写得不好或者不到位的地方请多多指教,我将万分感激,感谢大家的支持!A - ASCII code 题目大意 给定正整数\(N\),输出ASCII码是\(N\)的字母。 \(97\le N\le 122\) 输入格式 \(N\) 输出格式 输出ASCII码是\(N\)的字母。 分析 注意…

苯乙烯

周线 日线: 60分钟: 短线看能否走出下跌五浪吧:观望

AtCoder Beginner Contest 205 A~E 题解

A - kcal 题目大意 我们有一种每\(100\)毫升含有\(A\)千卡热量的饮料。\(B\)毫升的这种饮料含有多少千卡热量? \(0\le A, B\le 1000\) 输入格式 \(A~B\) 输出格式 输出\(B\)毫升这种饮料包含的的千卡数。最大允许浮点数精度误差\(10^{-6}\)。 样例\(A\) \(B\) 输出\(45\) \(20…

AtCoder Beginner Contest 196 A~E 题解

A - Difference Max 题目大意 给定四个整数\(a,b,c\)和\(d\)。 我们要选择两个整数\(x\)和\(y\)(\(a\le x\le b\);\(c\le y\le d\))。输出最大的\(x-y\)。 \(-100\le a\le b\le 100\) \(-100\le c\le d\le 100\) 输入格式 \(a~~b\) \(c~~d\) 输出格式 输出最大的\(x-y\)。 样…

AtCoder Beginner Contest 173 A~D 题解

A - Payment 题目大意 如果使用价值\(1000\)元的纸币(假设有)支付\(N\)元,服务员会找多少钱? \(1\le N\le 10000\) 输入格式 \(N\) 输出格式 一行,即服务员找的钱数。 样例输入 输出1900 1003000 0分析 特判: 如果\(N\)除以\(1000\)能整除,那么不需要找钱,输出\(0\); …

AtCoder Beginner Contest 188 A~D 题解

A - Three-Point Shot 题目大意 有两个球队,分别得到\(X\)分和\(Y\)分,问得分较少的球队能否在获得三分后超越对方。 \(0\le X,Y\le 100\) \(X \ne Y\) \(X\)和\(Y\)都是整数。 输入格式 \(X~Y\) 输出格式 如果能,输出Yes;否则,输出No。 样例X Y 输出3 5 Yes分析 这个不用…

Eclipse安装包下载慢解决方法

最近开始学习Java,使用经典的Eclipse IDE,结果发现下载太慢……问题分析Eclipse的下载依赖于其他镜像,(在我这里)默认为朝鲜的镜像(可能在不同电脑中默认不同):点击Select Another Mirror:选择中国的镜像:

程序无法启动,因为您的计算机缺少msvcr71.dll。

背景 打开CrystalTile2这个软件出现此提示。 解决 有很多解决办法,最简单粗暴也是见效最快的就是直接从网上下载dll文件放到对应位置。 下载 https://msvcr71.dll-box.com/zh/自己存了一份,以免网址失效(虽然按道理来说一般不会失效)。 https://www.123pan.com/s/EhW3jv-IW…

Panasonic Programming Contest 2020 C (Sqrt Inequality) 题解

题目大意 输入三个整数\(a\),\(b\),\(c\),如果 \(\sqrt a + \sqrt b < \sqrt c\) 成立,输出Yes,否则输出No。 样例 输入 #1 2 3 9输出 #1 No\(\sqrt 2 + \sqrt 3 < \sqrt 9\) 不成立。 输入 #2 2 3 10输出 #2 Yes\(\sqrt 2 + \sqrt 3 < \sqrt 10\) 成立。 分析 错…

CodeForces Round #621 ABC (1307A+1307B+1307C) 题解

A. Cow and Haybales 题面 The USA Construction Operation (USACO) recently ordered Farmer John to arrange a row of n haybale piles on the farm. The \(i\)-th pile contains \(a_i\) haybales. However, Farmer John has just left for vacation, leaving Bessie all o…

Python函数之*[参数名]和**[参数名]的用处

一、*[参数名] 调用 合法调用 普通调用 *参数名一般写成*args, 如: def func(*args):print(args)可以试着调用func: >>> func(1) (1,) >>> func() () >>> func(1, 2, 3) (1, 2, 3) >>> func(dict(), set(), str(), int()) ({}, set(), ,…

discuz3.4文件包含漏洞

首先查看修复:可以看到新增代码preg_match("/^[\w-]+\.php$/i", $parse[path])) 来验证path是否为php文件,这个应该是修复路径遍历导致的文件读取漏洞。还有require ./.$_ENV[curapp]..php;这里应该是另外一个漏洞,因为$parse[path]和$_ENV[curapp]没有关联。 然后…