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

AtCoder Beginner Contest 388

时间:2025-01-18 13:33:26浏览次数:1  
标签:AtCoder return Beginner int 代码 cin long solve 388



A - A - ?UPC

题意

给定字符串\(s\),输出\(s\)首个字符与\(UPC\)组成的字符串

思路

模拟

代码

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;

const int mxn = 1e6 + 5;

void solve()
{
	string s;
	cin >> s;
	cout << s[0] << "UPC" << endl;
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int T = 1;
	//cin >> T;
	while (T--)
	{
		solve();
	}

	return 0;
}


B - Heavy Snake

题意

有\(n\)条蛇,最初第\(i\)条蛇的长度为\(L_i\)、厚度为\(T_i\)。定义第\(i\)条蛇的重量为\(T_i×L_i\)。对于满足\(1≤k≤D\)的每个整数\(k\),求每条蛇的长度增加\(k\)时最重的蛇的重量

思路

自定义排序

代码

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;

const int mxn = 1e6 + 5;

bool cmp(pii& a, pii& b)
{
	return a.first * a.second > b.first * b.second;
}

void solve()
{
	int n, k;
	cin >> n >> k;
	vector<pii> v(n);
	for (int i = 0; i < n; i++)
	{
		cin >> v[i].first >> v[i].second;
	}
	for (int i = 1; i <= k; i++)
	{
		for (int j = 0; j < n; j++)
		{
			v[j].second++;
		}
		sort(v.begin(), v.end(), cmp);
		cout << v[0].first * v[0].second << endl;
	}
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int T = 1;
	//cin >> T;
	while (T--)
	{
		solve();
	}

	return 0;
}


C - Various Kagamimochi

题意

\(n\)个年糕,第\(i\)个年糕大小为\(a_i\),按升序输入。对于两个年糕\(i,j\),当且仅当\(a_i\le a_j\)时可以将\(i\)叠在\(j\)上组成一个年糕。问两两叠加一共能组成多少不同的年糕

思路

由于是升序输入,对于每个年糕,只需要二分找第一个不小于自己大小两倍的年糕的位置累加即可。

代码

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;

const int mxn = 1e6 + 5;

void solve()
{
	int n;
	cin >> n;
	vector<int> v(n);
	for (int i = 0; i < n; i++)
	{
		cin >> v[i];
	}
	int ans = 0;
	for (int i = 0; i < n; i++)
	{
		auto p = lower_bound(v.begin(), v.end(), 2 * v[i]);
		if (p != v.end())
		{
			ans += n - (p - v.begin());
		}
	}
	cout << ans << endl;
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int T = 1;
	//cin >> T;
	while (T--)
	{
		solve();
	}

	return 0;
}

D - Coming of Age Celebration

题意

有\(n\)个未成年人,第\(i\)个人有\(a_i\)个宝石,并在第\(i\)年成年。当有人成年时,有宝石的成年人会每人会给刚成年的人\(1\)个宝石。求\(n\)年后每人各有多少宝石。

思路

"在第\(i\)年成年"就只用按编号往后推,第\(i\)成年时前\(i-1\)个人都要给他石头(如果有的话);第\(i\)个人要给后\(n-i\)每人一个石头

代码

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;
#define lc p << 1
#define rc p << 1 | 1

const int mxn = 5e5 + 5;

int n;
int t[mxn];

struct tree
{
	int l, r, sum, lazy;
}tr[4 * mxn];

int a[mxn];

inline void pushup(int p)
{
	tr[p].sum = tr[lc].sum + tr[rc].sum;
}

void pushdown(int p)
{
	tr[lc].sum += tr[p].lazy * (tr[lc].r - tr[lc].l + 1);
	tr[lc].lazy += tr[p].lazy;
	tr[rc].sum += tr[p].lazy * (tr[rc].r - tr[rc].l + 1);
	tr[rc].lazy += tr[p].lazy;
	tr[p].lazy = 0;
}

void build(int p, int l, int r)
{
	tr[p].l = l;
	tr[p].r = r;
	tr[p].lazy = 0;
	if (l == r)
	{
		tr[p].sum = a[l];
		return;
	}
	int mid = l + r >> 1;
	build(lc, l, mid);
	build(rc, mid + 1, r);
	pushup(p);
}

void update(int p, int l, int r, int k)
{
	if (tr[p].l >= l && tr[p].r <= r) // 查询区间覆盖当前区间
	{
		tr[p].sum += (tr[p].r - tr[p].l + 1) * k;
		tr[p].lazy += k;
		return;
	}
	int mid = tr[p].l + tr[p].r >> 1;
	pushdown(p);
	if (l <= mid)
	{
		update(lc, l, r, k);
	}
	if (r > mid)
	{
		update(rc, l, r, k);
	}
	pushup(p);
}

int query(int p, int l, int r)
{
	if (tr[p].l >= l && tr[p].r <= r) // 查询区间覆盖当前区间
	{
		return tr[p].sum;
	}
	int mid = tr[p].l + tr[p].r >> 1;
	pushdown(p);
	int res = 0;
	// 有交集
	if (l <= mid)
	{
		res += query(lc, l, r);
	}
	if (r > mid)
	{
		res += query(rc, l, r);
	}
	return res;
}

void solve()
{
	cin >> n;
	vector<int> v(n + 1);
	for (int i = 1; i <= n; i++)
	{
		cin >> v[i];
	}
	build(1, 1, n);
	for (int i = 1; i <= n; i++)
	{
		int t = query(1, i, i); // 自己收到的
		// 给后面的发,直到没有
		update(1, i + 1, min(i + v[i] + t, n), 1);
		v[i] = max(0LL, v[i] + t - n + i);
	}
	for (int i = 1; i <= n; i++)
	{
		cout << v[i] << " ";
	}
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int T = 1;
	//cin >> T;
	while (T--)
	{
		solve();
	}

	return 0;
}

E - Simultaneous Kagamimochi

题意

同\(C\),最后求最多同时能制作多少年糕

思路

像\(C\)一样二分选尽量小的根自己组合\(WA\)了很多点,应该不能这么做。
考虑二分答案,最少\(0\)个,最多\(n/2\)个,选择最前与最后的区间配对(小对小,大对大)。

代码

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;

const int mxn = 5e5 + 5;

int n;
int a[mxn];

bool check(int x)
{
	for (int i = 0; i < x; i++)
	{
		if (a[i] * 2 > a[n - x + i])
		{
			return false;
		}
	}
	return true;
}

void solve()
{
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	int l = 0, r = n / 2, ans = 0;
	while (l <= r)
	{
		int mid = l + r >> 1;
		if (check(mid))
		{
			l = mid + 1;
			ans = mid;
		}
		else
		{
			r = mid - 1;
		}
	}
	cout << ans << endl;
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int T = 1;
	//cin >> T;
	while (T--)
	{
		solve();
	}

	return 0;
}


F -

题意

思路

代码

点击查看代码


G -

题意

思路

代码

点击查看代码



比赛链接 https://atcoder.jp/contests/abc388

标签:AtCoder,return,Beginner,int,代码,cin,long,solve,388
From: https://www.cnblogs.com/Seii/p/18675123

相关文章

  • AtCoder Regular Contest 058 [ARC058] F - Unhappy Hacking
    题意:有三种操作,在右边添加0/1或删除最右边的数(空字符串无操作)给出操作数\(N\),字符串\(s\),问有多少种方法经过\(N\)次操作后得到字符串\(S\)思路最开始在想三维dp,虽然发现了性质,但是没想到很好的用法重要性质:答案与字符串内容无关,仅与字符串长度有关定义\(f_{i,j}\)为操作\(i......
  • VP AtCoder Beginner Contest 382
    A-DailyCookie题意:有\(n\)个盒子,有些盒子有蛋糕,被人吃了\(m\)个蛋糕,问有几个盒子没蛋糕。直接计算即可。点击查看代码voidsolve(){intn,m;std::cin>>n>>m;std::strings;std::cin>>s;std::cout<<n-std::count(s.begin(),s.end(),......
  • 【0388】Postgres内核 SQL function 删除 physical replication slot 底层实现( 4 )
    文章目录1.概述2.`SQLfunction`2.1待删除`physicalreplicationslot`2.2检查当前用户权限2.3检查`Postgres`服务配置3.删除`physicalreplicationslot`3.1获取先前创建的`slot`3.1.1获取`slot`3.1.1初始化`active_pid`3.2永久删......
  • AtCoder Regular Contest 058 [ARC058] E - Iroha and Haiku
    题意:对于所有长度为\(n\),每个数在1到10之间的序列,问有多少个中包含一字串,满足字串可以分为三段和恰好为\(x,y,z\)的部分数据满足:\[3\len\le40,1\lex\le5,1\ley\le7,1\lez\le5,\]思路正向统计有多少个序列满足会遇到重复统计的问题,难以克服,考虑统计统......
  • VP Daiwa Securities Co. Ltd. Programming Contest 2024(AtCoder Beginner Contest 38
    A-Humidifier1题意:一个漏水的桶,在零时刻有零升水,进行\(n\)次加水,在\(t_i\)时刻加\(v_i\)升水,每一时刻会漏一生水,问第n次加水后有多少升水。直接模拟即可,每次加水先减去漏掉的水,注意至少有0升,然后加上新加的水。点击查看代码voidsolve(){intn;std::cin>>n;......
  • VP Toyota Programming Contest 2024#12(AtCoder Beginner Contest 384)
    A-aaaadaa题意:给你一个字符串和两个字符\(c_1\),\(c_2\),把字符串里的所有不等于\(c_1\)的字符都换成\(c_2\)。模拟即可。点击查看代码voidsolve(){intn;chara,b;std::cin>>n>>a>>b;std::strings;std::cin>>s;for(auto&c:......
  • ABC 388 (DEG)
    赛时4题,打得很差的一场。尤其是E题,赛时一直被卡,直到结束看群友的结论后顿然醒悟,不到3分钟码出并AC,只能恨自己赛时为什么这么sb...D模拟+差分从左到右枚举\(i\),每一次枚举可以计算出第\(i\)个人有多少颗糖(\(a[i]\)+前面\(i-1\)个人给的糖数\(num\))。这样,第\(i\)个人会给出的......
  • ABC388
    好像已经很久没有写过题解了Clink对于每一个糕点,二分查找大于等于它大小的二倍的糕点的位置(可以用\(lower_{}bound\)函数),从这个位置到\(n\)就是可以和这个糕点配对的糕点。猜猜我是啥#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn;inta[......
  • ABC388DEG 题解
    ABC388题解ABCDE+G,rk371。D观察到几个性质:一个人只会在成年的时候得到石头,在成年之后给出石头。第\(i\)个人成年之后,他要给之后的每个人一个石头(除非用光了)。也就是说,假设成年时它的石头数量为\(B_i\),则最终他的石头数量为\(\max(0,B_i-(n-i))\)。因此我们只需......
  • AtCoder Regular Contest 067
    \(AT\_arc067\_a\)https://www.luogu.com.cn/problem/AT_arc067_a题解:筛出\(1\simn\)中质数,计算每个质数出现次数,再累乘即可。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=1010,P=1e9+7;intn;intbuc[N];intprime[N],cnt;bool......