首页 > 其他分享 >AtCoder Beginner Contest(abc) 297

AtCoder Beginner Contest(abc) 297

时间:2023-06-28 22:22:52浏览次数:49  
标签:AtCoder abc f1 int long 花销 set 297 find




B - chess960

题目大意

给定一串字符串, 里面一定包含2个' B ', 2个' R ', 1个' K ', 问该字符串是否满足以下两个条件, 一是两个'B'所在位置奇偶性不同; 二是'K'的位置在两个'R'之间

解题思路

签到题不多嗦了;

神秘代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int, int> PII;
const int N = 100+ 10, mod = 998244353;
int n, m;
bool check(int a, int b) {
	bool f1, f2;
	if (a % 2 == 1) f1 = true;
	else f1 = false;
	if (b % 2 == 1) f2 = true;
	else f2 = false;
	if (f1 != f2) return true;
	else return false;
}
signed main(){
	string s;
	cin >> s;
	int x, y, z;
	x = s.find_first_of('B');
	y = s.find_last_of('B');
	if (check(x, y)) {
		x = s.find_first_of('R');
		y = s.find_last_of('R');
		z = s.find('K');
		if (x <= z && z <= y) cout << "Yes" << endl;
		else cout << "No" << endl;
	}
	else cout << "No" << endl;
	return 0;
}




D - Count Subtractions

题目大意

给定两个数a, b; 如果a > b, 则a -= b; 如果b > a, 则b -= a; 问经过多少次操作才能使得a = b;
保证一定有解;

解题思路

直接减肯定会超时, 所以需要用除法来加速;

神秘代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int, int> PII;
const int N = 100+ 10, mod = 998244353;
int n, m, k;
signed main(){
	cin >> n >> m;
	int a = max(n, m);
	int b = min(n, m);
	while (a != b) {
		int c = a / b;
		if (a % b == 0) c--;
		k += c;
		a -= c * b;
		swap(a, b);
	}
	cout << k << endl;
	return 0;
}




E - Kth Takoyaki Set

题目大意

小莫去买礼物, 现在给定n个礼物以及它们的价格; 并且小莫至少会买一个礼物; 问小莫的多种选择方案种花销第m少的花费是多少; 如果有多种选择方案的花销是相同的, 那么这个花销只能算一次;

解题思路

据说这是一个经典题目. 但是这个题我想的太复杂了, 题解是用set来维护当前最小值; 先把最初的n个价格放进set中, 找到最小值; 这就是最少的花销, 我们把这个数存起来后再把它从set中删去; 然后再遍历最初的n个价格, 让他们都加上当前的最小值, 然后在放进set; 重复上述过程就找到了第2少的花销, 直到找到第m少即可;

神秘代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int, int> PII;
const int N = 2e5+ 10, mod = 998244353;
int n, m, k;
int q[N];
set<int> s;
signed main(){
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> q[i];
		s.insert(q[i]);
	}
	for (int i = 1; i < m; i++) {
		int t = *s.begin();
		s.erase(s.begin());
		for (int j = 1; j <= n; j++) {
			s.insert(t + q[j]);
		}
	}
	cout << *s.begin();
	return 0;
}

标签:AtCoder,abc,f1,int,long,花销,set,297,find
From: https://www.cnblogs.com/mostimali/p/17512701.html

相关文章

  • AtCoder Beginner Contest 296 Ex Unite
    洛谷传送门AtCoder传送门不错的dp。考虑按行从上往下dp,并且把列的连通状态塞进dp状态里面。实际上就是塞一个并查集。判状态合法性就是当一个竖的全黑长条结束后,有没有跟别的列连起来。code//Problem:Ex-Unite//Contest:AtCoder-AtCoderBeginnerContest29......
  • AtCoder Beginner Contest 227 H Eat Them All
    洛谷传送门AtCoder传送门好奇特的题。考虑显式建图,那么这是一个\(9\)个结点,\(12\)条边的图,需要找到一条回路使得第\(i\)个点被经过\(a_i\)次。首先会有一个基本思路:先求出每条边经过的次数,然后每条边复制这么多次即可直接构造欧拉回路。其中每条边经过次数的限制就是,......
  • AtCoder Beginner Contest 306(ABC 306) E~F补题
    E题目大意给定数字$k$,规定数组$A$的函数$f(A)$:$A$数组前$k$大数字的和如$A=[1,3,7,~4]$,$k=2$,则$f(A)=7+4=11$现在给定最大数组长度$n$,有$q$组操作,每次将第$x$个数字修改为$y$,输出每次操作后的$f(A)$其中$0<k\leqn\leq5\times10^5,~q\leq5\times......
  • AtCoder Beginner Contest 228 G Digits on Grid
    洛谷传送门AtCoder传送门?这啥啊,不会。考虑行和列分别作为左部点和右部点建二分图(实际上这个建图只是辅助理解,不需要显式建图),每个左部点和每个右部点,边权为格子中的数。容易想到一个dp,设\(f_{i,j}\)为走了\(i\)步,当前在点\(j\),走过的所有边权组成的不同整数的数量。但......
  • [ABC307G] Approximate Equalizatio
    [ABC307G]ApproximateEqualizatio题意给定一个数组\(a_i\),有两种操作。\(a_i+1,a_{i+1}-1\)\(a_i-1,a_{i+1}+1\)问最少花费多少次操作能使数组的极差不超过\(1\)。题解题目其实并不难,容易发现总和不变,由于极差不超过\(1\),设平均数为\(s\),则数组中只有\(s\)和......
  • AtCoder Beginner Contest 072
    A-Sandglass2#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongint32_tmain(){inta,b;cin>>a>>b;cout<<max(a-b,0ll);return0;}B-OddString#include<bits/stdc++.h>......
  • AtCoder Beginner Contest 238 Ex Removing People
    洛谷传送门AtCoder传送门考虑期望转计数,方案数显然是\(n!\)(第\(i\)次操作有\(n-i+1\)个人可供选择),所以问题转化为求所有方案的代价之和。考虑倒着做,变成先放一个人,然后依次放\(n-1\)个人,每次放的这个人可以让左边的人的\(S\)变成R,代价是他与他左边的人的距离,......
  • AtCoder Beginner Contest 307 Ex Marquee
    洛谷传送门AtCoder传送门一开始看错题了,看了好久才发现就是个板子。。。这个东西本质上是循环移位,我们考虑在\(S\)前后各添加\(W-1\)个.,例如\(W=5,S=\texttt{ABC}\)时,添加后\(S=\texttt{....ABC....}\)。此时我们发现\(S\)的每个长度为\(W\)的子串一一对......
  • AtCoder Beginner Contest(abc) 307
    A-WeeklyRecords题目大意小莫每天跑步,输入n周每天的步数,输出每周跑的总步数;解题思路签到题不多嗦了;神秘代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,m,k,idx;signedmain(){ cin>>n; intsum=0; for(inti......
  • AtCoder Beginner Contest 307 G Approximate Equalization
    洛谷传送门AtCoder传送门考虑我们如果确定了最终态\(B=(B_1,B_2,...,B_n)\),如何计算最少操作次数。显然从左往右依次使\(A_i=B_i\)。当操作到第\(i\)个位置时,此时\(A'_i=\sum\limits_{j=1}^iA_j-B_j\),所需操作次数为\(|A'_i|\)。令\(C_i=\sum\limits_{......