首页 > 其他分享 >AtCoder Beginner Contest 171 A~D 题解

AtCoder Beginner Contest 171 A~D 题解

时间:2024-09-08 20:53:20浏览次数:9  
标签:AtCoder le .. 输出 int 题解 样例 输入 171

A - αlphabet

题目大意

输入一个英文字母\(a\),判断它是大写还是小写。

输入格式

\(a\)

输出格式

如果\(a\)为小写,输出a
如果\(a\)为大写,输出A

样例输入1

B

样例输出1

A

B为大写,所以输出A

样例输入2

a

样例输出2

a

a为小写,所以输出a

代码

#include <cstdio>
using namespace std;

int main(int argc, char** argv)
{
	char a = getchar();
	if('a' <= a && a <= 'z') putchar('a');
	else putchar('A');
	return 0;
}

B - Mix Juice

题目大意

给定一个长度为\(N\)的数组\(p_1, p_2, p_3, ..., p_N\),要求从其中选出\(K\)个数,使它们的和最小。

\(1\le K\le N\le 1000\)
\(1\le p_i\le 1000\) (\(1\le i\le N\))

输入格式

\(N K\)
\(p_1~p_2~p_3~\dots~p_N\)

输出格式

一行,即最小的和。

样例输入1

5 3
50 100 80 120 80

最小的和是\(50+80+80=210\)。

样例输出1

210

B为大写,所以输出A

样例输入2

1 1
1000

样例输出2

1000

因为只有一个数,所以最小的和就是\(1000\)。(此注释为笔者所加)

代码

题目要求和最小,其实只要找到数组中最小的\(K\)个数字的和即可。可以使用<algorithm>库中的sort()函数对p数组进行升序排序,再取前\(K\)个数字之和作为结果输出。

#include <cstdio>
#include <algorithm>
#define maxn 1005
using namespace std;

int a[maxn];

int main(int argc, char** argv)
{
	int n, k, sum = 0;
	scanf("%d%d", &n, &k);
	for(int i=0; i<n; i++)
		scanf("%d", a + i);
	sort(a, a + n);
	for(int i=0; i<k; i++)
		sum += a[i];
	printf("%d\n", sum);
	return 0;
}

C - One Quadrillion and One Dalmatians

题目大意

有\(1000000000000001\)(\(10^{15}+1\))只狗,它们的名字分别为:
a, b, .., z, aa, ab, .., az, ba, bb, .., bz, .., za, zb, .., zz, aaa, aab, .., aaz, aba, abb, .., abz, ., zzz, aaaa, ..
问题:第\(N\)只狗的名字是什么?

\(1\le N\le 10^{15}+1\)

输入格式

\(N\)

输出格式

一行,即第\(N\)只狗的名字。

样例

样例较多,为了节省文章篇幅,所以直接整合成表格:

输入 输出
2 b
27 aa
123456789 jjddja

代码

其实就是把十进制转换成二十六进制:

#include <cstdio>
#define BASE 26LL
using namespace std;

int main(int argc, char** argv)
{
	char s[12];
	int cnt = 0;
	long long n;
	scanf("%lld", &n);
	while(n > 0)
	{
		n --;
		s[cnt++] = n % BASE + 'a';
		n /= BASE;
	}
	for(int i=cnt-1; i>=0; i--) putchar(s[i]);
	putchar('\n');
	return 0;
}

D - Replacing

题目大意

有一个数组\(A_1, A_2, \dots, A_N\)。
执行如下\(Q\)个操作:

  • 在第\(i\)个操作中,将数组中所有的\(B_i\)替换成\(C_i\)。
  • 输出操作后\(A\)中所有数之和(记为\(S_i\))。

\(1\le N, Q, A_i, B_i, C_i\le 10^5\) (\(1\le i\le N\))
\(B_i\ne C_i\)

输入格式

\(N\)
\(A_1~A_2~...~A_N\)
\(Q\)
\(B_1~C_1\)
\(B_2~C_2\)
\(:\)
\(B_Q~C_Q\)

输出格式

\(S_1\)
\(S_2\)
\(:\)
\(S_N\)

样例输入1

4
1 2 3 4
3
1 2
3 4
2 4

样例输出1

11
12
16
时间 数组\(A\)
开始 \(\{1, 2, 3, 4\}\)
\(i=1\) \(\{2, 2, 3, 4\}\)
\(i=2\) \(\{2, 2, 4, 4\}\)
\(i=3\) \(\{4, 4, 4, 4\}\)

样例输入2

4
1 1 1 1
3
1 2
2 1
3 5

注意:\(B_i\)不一定存在列表中。

样例输出2

8
4
4

样例输入3

2
1 2
3
1 100
2 100
100 1000

样例输出3

102
200
2000

代码

可以用数组记录\(A\)中每个值出现的次数。这里由于题目原因,还需要记录数组\(A\)每个数之和。

#include <cstdio>
#define maxn 100005
using namespace std;

typedef long long LL;

int cnt[maxn];
LL sum = 0;

inline LL s(const LL& i)
{
	return cnt[i] * i;
}

int main(int argc, char** argv)
{
	int n, q;
	scanf("%d", &n);
	for(int i=0; i<n; i++)
	{
		int t;
		scanf("%d", &t);
		sum += t;
		cnt[t] ++;
	}
	scanf("%d", &q);
	while(q--)
	{
		int x, y;
		scanf("%d%d", &x, &y);
		sum -= s(x) + s(y);
		cnt[y] += cnt[x];
		cnt[x] = 0;
		sum += s(y);
		printf("%lld\n", sum);
	}
	return 0;
}

标签:AtCoder,le,..,输出,int,题解,样例,输入,171
From: https://www.cnblogs.com/stanleys/p/18403441/abc171

相关文章

  • AtCoder Beginner Contest 187 A~D 题解
    A-LargeDigits题目大意给定两个三位整数\(A\)和\(B\),求它们数位和的最大值。数位和:例如,\(123\)的数位和是\(1+2+3=6\)。\(100\leA,B\le999\)输入格式\(A~~B\)输出格式一行,即\(A\)和\(B\)数位和的最大值。样例输入输出12323495939531710099927......
  • AtCoder Beginner Contest 173 A~D 题解
    A-Payment题目大意如果使用价值\(1000\)元的纸币(假设有)支付\(N\)元,服务员会找多少钱?\(1\leN\le10000\)输入格式\(N\)输出格式一行,即服务员找的钱数。样例输入输出190010030000分析特判:如果\(N\)除以\(1000\)能整除,那么不需要找钱,输出\(0\);如果......
  • Panasonic Programming Contest 2020 C (Sqrt Inequality) 题解
    题目大意输入三个整数\(a\),\(b\),\(c\),如果\(\sqrta+\sqrtb<\sqrtc\)成立,输出Yes,否则输出No。样例输入#1239输出#1No\(\sqrt2+\sqrt3<\sqrt9\)不成立。输入#22310输出#2Yes\(\sqrt2+\sqrt3<\sqrt10\)成立。分析错误思路首先,由......
  • AtCoder Beginner Contest 188 A~D 题解
    A-Three-PointShot题目大意有两个球队,分别得到\(X\)分和\(Y\)分,问得分较少的球队能否在获得三分后超越对方。\(0\leX,Y\le100\)\(X\neY\)\(X\)和\(Y\)都是整数。输入格式\(X~Y\)输出格式如果能,输出Yes;否则,输出No。样例XY输出35Yes分析这个不用......
  • AtCoder Beginner Contest 161D 题解
    原题链接:洛谷链接;AtCoder链接思路每次根据上一位,计算下一位为TA-1/TA/TA+1,放入queue中,最后输出第\(K\)次弹出的整数。注意事项不用longlong会WA!上一位为\(0\)时下一位不能为\(-1\)!(要特判)上一位为\(9\)时下一位不能为\(10\)!(也要特判)代码#include<cstdio>#include<que......
  • CodeForces Round #621 ABC (1307A+1307B+1307C) 题解
    A.CowandHaybales题面TheUSAConstructionOperation(USACO)recentlyorderedFarmerJohntoarrangearowofnhaybalepilesonthefarm.The\(i\)-thpilecontains\(a_i\)haybales.However,FarmerJohnhasjustleftforvacation,leavingBessieal......
  • 2024CCPC网络赛题解
    前言开局掉线30min比较搞心态,不过比赛延迟了1个小时,但是后面也一直没过题,如果时间再少点可能排名还更好看。最后是8题前面,这里简单讲一下我有写的题,队友写的题就放一下队友的赛时代码,大家自己看看吧。B队友写的,签到,但是数据范围\(n\)给\(10^3\)给队友整不自信了,因为答案的......
  • AT_dwacon6th_prelims_c Cookie Distribution 题解
    组合意义保平安。思路发现\(\prod\)的贡献不好统计。我们可以考虑\(\prod\)的组合意义。容易发现:\[\prodc_i=\prod\sum_{j=1}^{c_i}1\]那么依照分配律,我们发现这个东西的组合意义是每个人从获得的饼干中选一个出来的方案。这样就会变好统计很多。设\(dp_{i,j}\)为......
  • CF1534F2 Falling Sand (Hard Version) 题解
    题目链接点击打开链接题目解法做法1一个沙子消失,会带走所有它所在列下面的沙子我们记每列从下往上第\(a_i\)个沙子为关键点,第\(i\)列至少消失\(a_i\)个沙子等价于所有关键点都消失一个显然的事情是:记一列最上面的沙子为起始点,则我们只会干扰起始点第一感觉是找到一......
  • LOJ4218 「IOI2024」尼罗河船运 题解
    题目描述有\(n\)件手工艺品,第\(i\)件重量为\(w_i\),有参数\(a_i\)和\(b_i\)。每艘船最多可以运输两件手工艺品:如果只运输第\(i\)件,重量没有要求,代价为\(a_i\)。如果同时运输第\(i\)和第\(j\)件,要求\(|w_i-w_j|\leD\),代价\(b_i+b_j\)。\(q\)次询问,给......