AtCoder Beginner Contest 115 题解
题目链接:https://abc115.contest.atcoder.jp/
A Christmas Eve Eve Eve
题目:
Time limit : 2sec / Memory limit : 1024MB
Score : 100 points
Problem Statement
In some other world, today is December D-th.
Write a program that prints Christmas if D=25, Christmas Eve if D=24, Christmas Eve Eve if D=23 and Christmas Eve Eve Eve if D=22.
Constraints
- 22≤D≤25
- D is an integer.
Input
Input is given from Standard Input in the following format:
D
Output
Print the specified string (case-sensitive).
Sample Input 1
25
Sample Output 1
Christmas
Sample Input 2
22
Sample Output 2
Christmas Eve Eve Eve
Be sure to print spaces between the words.
题解:
没什么好说的。
#include <cstdio> using namespace std; int main()
{
int d;
scanf("%d", &d);
if(d == )
printf("Christmas\n");
else if(d == )
printf("Christmas Eve\n");
else if(d == )
printf("Christmas Eve Eve\n");
else if(d == )
printf("Christmas Eve Eve Eve\n");
return ;
}
B Christmas Eve Eve
题目:
Time limit : 2sec / Memory limit : 1024MB
Score : 200 points
Problem Statement
In some other world, today is the day before Christmas Eve.
Mr. Takaha is buying N items at a department store. The regular price of the i-th item (1≤i≤N) is pi yen (the currency of Japan).
He has a discount coupon, and can buy one item with the highest price for half the regular price. The remaining N−1 items cost their regular prices. What is the total amount he will pay?
Constraints
- 2≤N≤10
- 100≤pi≤10000
- pi is an even number.
Input
Input is given from Standard Input in the following format:
N
p1
p2
:
pN
Output
Print the total amount Mr. Takaha will pay.
Sample Input 1
3
4980
7980
6980
Sample Output 1
15950
The 7980-yen item gets the discount and the total is 4980+7980⁄2+6980=15950 yen.
Note that outputs such as 15950.0 will be judged as Wrong Answer.
Sample Input 2
4
4320
4320
4320
4320
Sample Output 2
15120
Only one of the four items gets the discount and the total is 4320⁄2+4320+4320+4320=15120 yen.
题解:
没什么好说的。
#include <cstdio>
#include <iostream> using namespace std; int main()
{
int n;
scanf("%d", &n);
int p[], maxp = , sum = ;
for(int i = ; i < n; ++i)
{
scanf("%d", &p[i]);
maxp = max(maxp, p[i]);
sum += p[i];
}
sum = sum - maxp + maxp / ;
printf("%d\n", sum);
return ;
}
C Christmas Eve
题目:
Time limit : 2sec / Memory limit : 1024MB
Score : 300 points
Problem Statement
In some other world, today is Christmas Eve.
There are N trees planted in Mr. Takaha's garden. The height of the i-th tree (1≤i≤N) is hi meters.
He decides to choose K trees from these trees and decorate them with electric lights. To make the scenery more beautiful, the heights of the decorated trees should be as close to each other as possible.
More specifically, let the height of the tallest decorated tree be hmax meters, and the height of the shortest decorated tree be hmin meters. The smaller the value hmax−hmin is, the better. What is the minimum possible value of hmax−hmin?
Constraints
- 2≤K<N≤105
- 1≤hi≤109
- hi is an integer.
Input
Input is given from Standard Input in the following format:
N K
h1
h2
:
hN
Output
Print the minimum possible value of hmax−hmin.
Sample Input 1
5 3
10
15
11
14
12
Sample Output 1
2
If we decorate the first, third and fifth trees, hmax=12,hmin=10 so hmax−hmin=2. This is optimal.
Sample Input 2
5 3
5
7
5
7
7
Sample Output 2
0
If we decorate the second, fourth and fifth trees, hmax=7,hmin=7 so hmax−hmin=0. This is optimal.
There are not too many trees in these sample inputs, but note that there can be at most one hundred thousand trees (we just can't put a sample with a hundred thousand lines here).
题解:
最终的答案就是k个数中的最大高度-最小高度。要让答案尽可能的小,就要让这两个值尽可能接近。很容易想到排序一下,然后枚举第i个和第i+k-1个之间的差值(0≤i≤n-k),取最小值即可。
#include <cstdio>
#include <algorithm> using namespace std; int main()
{
int n, k;
scanf("%d %d", &n, &k);
int h[];
for(int i = ; i < n; ++i)
scanf("%d", &h[i]);
sort(h, h + n);
int ans = 1e9;
for(int i = ; i <= n - k; ++i)
ans = min(ans, h[i+k-] - h[i]);
printf("%d\n", ans);
return ;
}
D Christmas
题目:
Time limit : 2sec / Memory limit : 1024MB
Score : 400 points
Problem Statement
In some other world, today is Christmas.
Mr. Takaha decides to make a multi-dimensional burger in his party. A level-L burger (L is an integer greater than or equal to 0) is the following thing:
- A level-0 burger is a patty.
- A level-L burger (L≥1) is a bun, a level-(L−1) burger, a patty, another level-(L−1) burger and another bun, stacked vertically in this order from the bottom.
For example, a level-1 burger and a level-2 burger look like BPPPB and BBPPPBPBPPPBB (rotated 90 degrees), where B and P stands for a bun and a patty.
The burger Mr. Takaha will make is a level-N burger. Lunlun the Dachshund will eat X layers from the bottom of this burger (a layer is a patty or a bun). How many patties will she eat?
Constraints
- 1≤N≤50
- 1≤X≤( the total number of layers in a level-N burger )
- N and X are integers.
Input
Input is given from Standard Input in the following format:
N X
Output
Print the number of patties in the bottom-most X layers from the bottom of a level-N burger.
Sample Input 1
2 7
Sample Output 1
4
There are 4 patties in the bottom-most 7 layers of a level-2 burger (BBPPPBPBPPPBB).
Sample Input 2
1 1
Sample Output 2
0
The bottom-most layer of a level-1 burger is a bun.
Sample Input 3
50 4321098765432109
Sample Output 3
2160549382716056
A level-50 burger is rather thick, to the extent that the number of its layers does not fit into a 32-bit integer.
题解:
题目中burger的定义是递归的定义,自然也想到用递归的方式去做。我们可以发现burger是对称的。那么就可以分段递归。nlen是每个burger的长度(高度),p记录的是每个burger含有的p的个数。这两个公式稍微推一下就可以得到,是一个等比数列的问题,这里不展开了。(事实上直接迭代也可以得到)

另外,我们可以发现X≤N的时候,ans=0;X≥nlen[N]的时候,ans=p[N]。由此可以写出代码。
注意输入输出的时候为了防止Compilation Error,用cin和cout较为妥当。
#include <cstdio>
#include <cmath>
#include <iostream> using namespace std; typedef unsigned long long ll; ll p[], nlen[]; ll solve(ll n, ll x)
{
if(x <= n) return ;
if(x >= nlen[n] - ) return p[n];
if(x == nlen[n] / + ) return (p[n] / + );
else if(x < nlen[n] / + )
return solve(n - , x - );
else
return p[n] / + + solve(n - , x - nlen[n] / - );
} int main()
{
for(int i = ; i <= ; ++i)
{
p[i] = pow(, i + ) - ;
nlen[i] = pow(, i - ) * - ;
}
ll n, x;
cin>>n>>x;
cout<<solve(n, x)<<endl;
return ;
}
AtCoder Beginner Contest 115 题解的更多相关文章
- AtCoder Beginner Contest 154 题解
人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...
- AtCoder Beginner Contest 153 题解
目录 AtCoder Beginner Contest 153 题解 A - Serval vs Monster 题意 做法 程序 B - Common Raccoon vs Monster 题意 做 ...
- AtCoder Beginner Contest 177 题解
AtCoder Beginner Contest 177 题解 目录 AtCoder Beginner Contest 177 题解 A - Don't be late B - Substring C ...
- AtCoder Beginner Contest 184 题解
AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...
- AtCoder Beginner Contest 173 题解
AtCoder Beginner Contest 173 题解 目录 AtCoder Beginner Contest 173 题解 A - Payment B - Judge Status Summ ...
- AtCoder Beginner Contest 172 题解
AtCoder Beginner Contest 172 题解 目录 AtCoder Beginner Contest 172 题解 A - Calc B - Minor Change C - Tsu ...
- AtCoder Beginner Contest 169 题解
AtCoder Beginner Contest 169 题解 这场比赛比较简单,证明我没有咕咕咕的时候到了! A - Multiplication 1 没什么好说的,直接读入两个数输出乘积就好了. ...
- AtCoder Beginner Contest 148 题解
目录 AtCoder Beginner Contest 148 题解 前言 A - Round One 题意 做法 程序 B - Strings with the Same Length 题意 做法 ...
- AtCoder Beginner Contest 151 题解报告
总的来说,这次的题目比较水,然而菜菜的我并没有把所有题目都做完,话不多说,直接来干货: A:Next Alphabet 题目链接:https://atcoder.jp/contests/abc151/ ...
随机推荐
- 如何在MySQL中查询当前数据上一条和下一条的记录
如果ID是主键或者有索引,可以直接查找: 方法一: 查询上一条记录的SQL语句(如果有其他的查询条件记得加上other_conditions以免出现不必要的错误): select * from tab ...
- 【BZOJ 4709】柠檬 斜率优化dp+单调栈
题意 给$n$个贝壳,可以将贝壳分成若干段,每段选取一个贝壳$s_i$,这一段$s_i$的数目为$num$,可以得到$num^2\times s_i$个柠檬,求最多能得到几个柠檬 可以发现只有在一段中 ...
- BEC listen and translation exercise 40
However, recently there's been more and more interest in the development of ostrich farming in other ...
- Arc073_F Many Moves
传送门 题目大意 有$n$个格子从左到右依次挨着,一开始有两枚棋子分布在$A,B$某一个或两个格子里,有$m$个操作,第$i$次操作要求你把其中一个棋子移到$X_i$上,移动一个棋子的代价是两个格子之 ...
- Agc016_D XOR Replace
传送门 题目大意 给定两个长为$n$的序列$A,B$你可以进行若干组操作,每次操作选定一各位置$x$,令$A_x$等于$A$的异或和. 问能否通过一定操作使得$A$成为$B$,如果能,求最小操作书数. ...
- BZOJ4545: DQS的trie
BZOJ4545: DQS的trie https://lydsy.com/JudgeOnline/problem.php?id=4545 分析: 对trie用dfs建sam复杂度是\(O(n^2)\) ...
- POJ 1503 Integer Inquiry(大数相加)
一.Description One of the first users of BIT's new supercomputer was Chip Diller. He extended his exp ...
- 利用SharedRegion实现核间共享
导入SharedRegion模块 SharedRegion模块是一个共享区域,特别是对于多处理器环境下,SharedRegion模块就是用于让一个内存区域能被不同处理器共享并操作.这个模块会给每个处理 ...
- Boost库之asio io_service以及run、run_one、poll、poll_one区别
一.io_service的作用 io_servie 实现了一个任务队列,这里的任务就是void(void)的函数.Io_servie最常用的两个接口是post和run,post向任务队列中投递任务,r ...
- 【转】 Pro Android学习笔记(六八):HTTP服务(2):HTTP POST
目录(?)[-] 找一个测试网站 HTTP POST小例子 上次学习了HTTP GET请求,这次学习一下HTTP POST. 找一个测试网站 小例子好写,但要找个测试网站就有些麻烦,一下子无从入手,都 ...