首页 > 其他分享 >AtCoder Beginner Contest 052

AtCoder Beginner Contest 052

时间:2024-08-27 14:50:10浏览次数:13  
标签:AtCoder Beginner int cin long i64 using main 052

A - Two Rectangles

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;

int main() {
	ios::sync_with_stdio(false), cin.tie(nullptr);
	int A, B, C, D;
	cin >> A >> B >> C >> D;
	cout << max(A*B, C*D);
	return 0;
}

B - Increment Decrement

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;

int main() {
	ios::sync_with_stdio(false), cin.tie(nullptr);
	int N, x = 0;
	string S;
	cin >> N >> S;
	int ans = 0;
	for (int i = 0; i < N; i++) {
		if (S[i] == 'I') x++;
		else x--;
		ans = max(ans, x);
	}
	cout << ans;
	return 0;
}

C - Factors of Factorial

前置知识及例题:

约数个数定理:
假设一个数为 \(x\),它可以表示为 \(p_1^{a_1} \times p_2^{a_2} \times ... \times p_k^{a_k}\) ,那么它的约数个数就为 \(\prod\limits_{i=1}^k(a_i+1)\)。

例如 \(360\) = \(2^3 \times 3^2 \times 5\),那么 \(2\) 的个数有 \(4\) 种选择(选 \(0\) 个,选 \(1\) 个,选 \(2\) 个,选 \(3\) 个),\(3\) 的个数有 \(3\) 种选择,\(5\) 的个数有 \(2\) 种选择,因为是相互独立的,所以根据乘法原理,得到\(4*3*2=24\)。

例题:质因子分解
从 \(2\) 到 \(n\) 分别求质因子,不需要判断是否为质数,因为每个质因子我们都一直除,直到不能再除,以后也不会出现可以除的数是此数的倍数了,相当于已经筛掉了。

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;

int main() {
	ios::sync_with_stdio(false), cin.tie(nullptr);
	int N;
	cin >> N;
	vector<int> a(N + 1, 0);
	for (int i = 2; i <= N; i++) {
		int t = i;
		for (int j = 2; j <= i; j++) {
			while (t % j == 0) {
				a[j]++;
				t /= j;
			}
		}
	}
	for (int i = 1; i <= N; i++) {
		if (a[i] != 0) cout << i << " " << a[i] << "\n";//先输出底数再输出指数。
	}
	return 0;
}

这样看本题就很简单了。

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;

const int mod = 1e9 + 7;

int main() {
	ios::sync_with_stdio(false), cin.tie(nullptr);
	int N;
	cin >> N;
	vector<int> a(N + 1, 0);
	for (int i = 2; i <= N; i++) {
		int t = i;
		for (int j = 2; j <= i; j++) {
			while (t % j == 0) {
				a[j]++;
				t /= j;
			}
		}
	}
	i64 ans = 1;
	for (int i = 2; i <= N; i++) {
		if (a[i] != 0) {
			ans *= (a[i] + 1);
			ans %= mod;
		}
	}
	cout << ans;
  	return 0;
}

D - Walk and Teleport

贪心。 唯一需要注意的是 \(\rm min\) 的两个参数需要类型一致,因此需要开 \(\rm long\) \(\rm long\).

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;

int main() {
	ios::sync_with_stdio(false), cin.tie(nullptr);
	i64 N, A, B;
	cin >> N >> A >> B;
	vector<int> x(N);
	for (int i = 0; i < N; i++) cin >> x[i];
	i64 ans = 0;
	for (int i = 1; i < N; i++) {
		int d = x[i] - x[i - 1];
		ans += min(d * A, B);
	}
	cout << ans;
	return 0;
}

标签:AtCoder,Beginner,int,cin,long,i64,using,main,052
From: https://www.cnblogs.com/pangyou3s/p/18382678

相关文章

  • AtCoder Beginner Contest 051
    A-Haiku直接模拟。#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ ios::sync_with_stdio(false),cin.tie(nullptr); strings; cin>>s; stringa,b,c; a=s.substr(0,5); b=s.substr(6,7); c=s.substr(......
  • Hitachi Vantara Programming Contest 2024(AtCoder Beginner Contest 368)题解A~D
    A-Cut题意:将数组的后k个字符移到前面思路:可以用rotate()函数让数组中的元素滚动旋转rotate(v.begin(),v.begin()+n-k,v.end());直接输出后k个元素,再输出前n-k个元素for(inti=n-k;i<n;i++)write(v[i]);for(inti=0;i<n-k;i++)write(v[i]);B-Decrease2......
  • AtCoder ABC 368题解
    前言本题解部分思路来自于网络。A-Cut题目大意有\(n\)张卡片叠在一起,从上到下给出\(n\)卡片的编号,将\(k\)张卡片从牌堆底部放到顶部后,从上到下输出卡片的编号。解题思路按照题意模拟即可。code#include<bits/stdc++.h>usingnamespacestd;inta[105];intmai......
  • AtCoder Beginner Contest 368(ABC368)
    [ABC368F]DividingGame题意:有\(n\)堆石子,第\(i\)堆有\(a_i\)颗石子,每次可以拿走任意一堆石子数量任何数量的棋子,但是要保证拿走之后该堆的石子数量为原来的约数(不能不拿)。问是先手必胜还是后手必胜。\(n,a_i\le10^5\)。思路:发现与Nim游戏类似,且全局信息公开,状态......
  • Hitachi Vantara Programming Contest 2024(AtCoder Beginner Contest 368)- C
    题意概述有\(N\)个数,分别为\(H_1,H_2,H_3……H_N\)。你将使用初始化为\(0\)的变量\(T\)重复以下操作,直到所有数的值都变为\(0\)或更少。将\(T\)增加\(1\)。然后,减少最前方\(H_i\)值大于等于\(1\)的值。如果\(T\)是\(3\)的倍数,\(H_i\)的值会减少\(3\);......
  • ATcoder368D题详解
    D题传送门一道很无脑的题,但考试没写出来爆搜首先看朴素算法1.从根节点开始遍历每个节点2.遇到要保存的节点就进行标记,直到所有保存节点都标记时间复杂度\(O(n)\)其实已经能过了,但我没用(doge)树链剖分(LCA)首先分析1.每一次砍掉枝叶,都是在没有要保存的节点存在子树上时2.......
  • AtCoder Beginner Contest 368
    A-Cut(abc368A)题目大意给定一个数组,将右边\(k\)个数保持原顺序挪到左边,输出。解题思路即从左边第\(n-k\)个数开始输出即可。或者用rotate函数转换一下。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::s......
  • AtCoder Beginner Contest 368 补题记录(A~D,F,G)
    被伟大的G创似辣。Asignedmain(){intn,k;cin>>n>>k;F(i,1,n)cin>>a[i];queue<int>stk;G(i,n,1)stk.push(a[i]);while(k--){intt=stk.front();stk.push(t);stk.pop();}stack<int>......
  • AtCoder Beginner Contest 049
    A-UOIAUAI#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ ios::sync_with_stdio(false),cin.tie(nullptr); charc; cin>>c; if(c=='a'||c=='e'||c=='i'||c==�......
  • AtCoder Beginner Contest 367 A ~ F(无D题)题解
    AtCoderBeginnerContest367A~F(̸\notD)几天前就已经vp过了,但是忘写题解了今天才想起来痛,早知道这么简单,我就不在家里摆烂了A.ShoutEveryday罚了好几发,我打比......