ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Atcoder Beginner Contest248

2022-04-17 11:02:41  阅读:157  来源: 互联网

标签:std Atcoder Beginner int cin ++ Contest248 ans dp


A.Lacked Number

思路:
  求出给出的字符串中缺少\(0\sim 9\)中的哪一个字符

	std::string s;
	std::cin >> s;
	std::vector<int> a(10);
	for (int i = 0; i < int(s.size()); i ++ ) a[s[i] - '0'] ++;
	int ans = 0;
	for (int i = 0; i < 10; i ++ ) if (!a[i]) ans = i;
	std::cout << ans << "\n";	

B.Slimes

思路:
  只要\(a < b\)就一直乘以\(k\)。

i64 a, b, k;
std::cin >> a >> b >> k;
int ans = 0;
while (a < b) {
	a *= k;
	ans ++;
}

std::cout << ans << "\n";

C.Dice Sum

思路:
  因为我们从第一个数开始选数的时候,只需要知道到最后的时候我们得到的和是多少就可以了,每一次都是从上一个状态递推到下一个状态的,所以可以选择用\(DP\)来求解。我们用\(dp[i][j]\)来表示枚举到第\(i\)个数的时候,所得到的和为\(j\)。状态转移方程为\(dp[i + 1][j + t] = dp[i + 1][j + t] + dp[i][j]\), \(t\)表示的是此时这个数是\(1 \sim m\)之间的某个数。

	int n, m, k;
	std::cin >> n >> m >> k;

	std::vector<std::vector<Z>> dp(n + 1, std::vector<Z> (k + m + 1));
	dp[0][0] = 1;
	for (int i = 0; i < n; i ++ ) {
		for (int j = 0; j <= k; j ++ ) {
			for (int t = 1; t <= m; t ++ )
				dp[i + 1][j + t] = dp[i + 1][j + t] + dp[i][j]; 
		}
	}

	Z ans = 0;
	for (int i = 0; i <= k; i ++ ) ans += dp[n][i];
	std::cout << ans.val() << "\n";

D. Range Count Query

思路:
  只需要把给的序列中所有的数和它们的下标都记录下来,在\(Q\)次查询的时候,每一次都二分出在\([l,r]\)之间\(x\)出现的\([ll, rr]\)然后直接相减就好了

    int n; std::cin >> n;
    std::vector<int> a(n + 1);
    for (int i = 1; i <= n; i ++ ) std::cin >> a[i];
    int mx = *max_element(a.begin(), a.end());
    std::vector<int> v[mx + 1];
    for (int i = 1; i <= n; i ++ ) v[a[i]].push_back(i);
    int m; std::cin >> m;
    while (m -- ) {
        int l, r, x;
        std::cin >> l >> r >> x;
        int ans = 0;
        if (v[x].size() == 0 || x > mx) std::cout << "0\n";
        else {
            int ll = lower_bound(v[x].begin(), v[x].end(), l) - v[x].begin();
            int rr = upper_bound(v[x].begin(), v[x].end(), r) - v[x].begin();
            std::cout << rr - ll << "\n";
        }
    }	

标签:std,Atcoder,Beginner,int,cin,++,Contest248,ans,dp
来源: https://www.cnblogs.com/Haven-/p/16154780.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有