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

AtCoder Beginner Contest 053

时间:2024-08-31 15:36:45浏览次数:7  
标签:AtCoder Beginner int cin long i64 ++ using 053

A - ABC/ARC

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;

int main() {
	ios::sync_with_stdio(false), cin.tie(nullptr);
	int x;
	cin >> x;
	if (x < 1200) cout << "ABC";
	else cout << "ARC";
	return 0;
}

B - A to Z String

从前到后找第一个 \(A\),从后到前找第一个 \(Z\) 即可。

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;

int main() {
	ios::sync_with_stdio(false), cin.tie(nullptr);
	string s;
	cin >> s;
	int n = s.size();
	int i = 0, j = n - 1;
	while (i < n) {
		if (s[i] == 'A') break;
		i++;
	}
	while (j >= 0) {
		if (s[j] == 'Z') break;
		j--;
	}
	cout << j - i + 1;
	return 0;
}

C - X: Yet Another Die Game

参考资料

贪心
既然要求最少的轮次,那么要每一轮拿更多的分数。

怎么让每一轮的分数最大化呢?

第一轮,按照贪心的“选择目前最优”的思路,选择六分;

第二轮,继续选择目前最优,由于要翻转,不能再得到六分,这次就选择到了五分(骰子上 \(6\) 和 \(5\) 相邻);

第三轮,又可以翻转回六分了,选择六分。

所以我们每一轮的得分为 \(6 \Longrightarrow 5 \Longrightarrow 6 \Longrightarrow 5 ...\)

如果 \(x\) 是 \(11\) 的倍数,答案当然呼之欲出—— \(\dfrac{x}{11}\) 所以,现在我们要处理的是 \(x\) 离 \(11\) 的倍数还差(或是多出)的一部分的处理方式

把一次 \(6\) 分 和一次 \(5\) 分看作一轮,现在如果我们按照一大轮一大轮地扔,需要扔几大轮?答案是向上取整的 \(\dfrac{x}{11}\),求出这个值以后,我们只需要再判断能不能少掷五分的那一次就好了。

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;

int main() {
	ios::sync_with_stdio(false), cin.tie(nullptr);
	i64 x, ans = 0;
	cin >> x;
	i64 n = ceil(x / 11.0);
	ans = n * 2;
	if (n * 11 - 5 >= x) ans--;
	cout << ans;
	return 0;
}

D - Card Eater

初步想到了应该需要排序后去重,但没想到具体的做法。

排序后,由于目标是尽可能使得标号两两不同,应当尽可能删除重复的。
注意题目说的花里胡哨的,其实就是每次丢弃两张牌。这样的话,我们计算出相邻扑克牌重复的次数,如果是偶数全部删除就行。如果是奇数,还得再删一个其他的,\(\rm m\)++。

#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);
	for (int i = 0; i < n; i++) cin >> a[i];
	sort(a.begin(), a.end());
	
	int m = 0;
	for (int i = 1; i < n; i++) {
		if (a[i] == a[i - 1]) m++;
	}
	if (m % 2 == 1) m++;
	cout << n - m;
 	return 0;
}

标签:AtCoder,Beginner,int,cin,long,i64,++,using,053
From: https://www.cnblogs.com/pangyou3s/p/18390377

相关文章

  • Hitachi Vantara Programming Contest 2024(AtCoder Beginner Contest 368)F - Dividing
    https://atcoder.jp/contests/abc368/tasks/abc368_f#include<bits/stdc++.h>#definexfirst#defineysecondusingnamespacestd;typedeflonglongll;typedefpair<ll,char>pii;constintN=2e5+10,inf=1e9;lln,m,k;intb[N],sg[N],a[N];vector......
  • Atcoder [AGC006D] Median Pyramid Hard 题解 [ 紫 ] [ 二分 ] [ adhoc ]
    MedianPyramidHard:二分trick加上性质观察题。trick我们可以二分值域,然后把大于等于它的数标记成\(1\),其他标记为\(0\)(有些题需要标记成\(-1\)),然后根据这个来check方案是否可行,这通常通过判断某个数是否是\(1\)来实现。本质上其实就是check大于等于它的数能否成为......
  • AtCoder Beginner Contest 368
    A-Cut题意签到题思路代码#include<bits/stdc++.h>usingnamespacestd;voidsolve(){intn,k;scanf("%d%d",&n,&k);vector<int>v(n);for(inti=0;i<n;i++){scanf("%d",&v[i......
  • AtCoder Beginner Contest 052
    A-TwoRectangles#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ ios::sync_with_stdio(false),cin.tie(nullptr); intA,B,C,D; cin>>A>>B>>C>>D; cout<<max(A*B,C*D); ......
  • 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.......