A.最后一课
题目描述
「一位死去的母亲,生前为孩子写了许多信,让她在每个生日都能收到一封。作为孩子坚强的奖励,她在每封信里都附上了足够买糖果的零花钱。随着孩子越长越大,信中的糖果钱也越来越多。她希望以这样的形式陪孩子长大。就算自己逝去,也能作为一位鼓励孩子成长的母亲,陪他们走过童年。」
“可惜的是,我没时间给你们留下这样的信了。但琪亚娜,我也能一直陪伴着你们成长。”
“你们从我这学会的东西、继承的东西,就是我留给你们的糖果。”
“那就是我曾经存在过的证明,也是我会永远陪伴你们的证明。”
“琪亚娜,我已经没有什么能教你的了。”
“因为不管前方有怎样的困难,你都能战胜它们。”
“你都能做出正确的选择。”
“我永远相信你”姬子温柔地注视着你,不再言语。
梦境中,琪亚娜看着已经逝去的姬子老师,决定不再逃避。请你帮琪亚娜计算到梦境出口的距离。假设以琪亚娜现在的位置为原点,则出口位置为(x,y),但梦境与现实不同。在梦境中,两点之间的实际距离不一定等于理论距离,经过你的一番研究发现,实际距离与理论距离的关系为:
f
(
x
)
=
{
x
x
<
=
10
,
x
+
f
(
x
−
5
)
10
<
x
<
=
50
,
x
+
f
(
x
−
20
)
50
<
x
<
=
100
f(x)=\begin{cases} x & x<=10,\\ x+f(x-5) & 10<x<=50,\\ x+f(x-20) & 50<x<=100 \end{cases}
f(x)=⎩
⎨
⎧xx+f(x−5)x+f(x−20)x<=10,10<x<=50,50<x<=100
x为理论距离,f(x)为实际距离
输入格式
两个整数x,y,表示出口坐标
输出格式
一个浮点数,表示琪亚娜距出口的实际距离,结果保留四位小数
样例 #1
样例输入 #1
3 4
样例输出 #1
5.0000
提示
1
<
=
x
2
+
y
2
<
=
10000
1<=x^2+y^2<=10000
1<=x2+y2<=10000
递归写法:
#include<bits/stdc++.h>
using namespace std;
double f(double x) {
if (x <= 10) return x;
else if (x > 10 && x <= 50) return x + f(x - 5);
else return x + f(x - 20);
}
int main() {
double x, y;
cin >> x >> y;
printf("%.4lf", f(sqrt(x * x + y * y)));
return 0;
}
循环写法:
#include<iostream>
#include<math.h>
using namespace std;
double x,y,cnt,res;
int main(){
cin>>x>>y;
cnt=sqrt(x*x+y*y);
while(cnt>50){
res+=cnt;
cnt-=20;
}
while(cnt>10){
res+=cnt;
cnt-=5;
}
res+=cnt;
printf("%.4lf",res);
return 0;
}
B.天使重构
题目描述
“地球这样的行星,是产生不了重元素的,你身体里的铁,来自璀璨的超新星爆炸”
“血液里的锌,源自两次中子星对撞后喷射向宇宙的尘埃”
“那微量的铜,更是需要见证一颗白矮星的死亡,即使是最微不足道的钴,也源自几十亿光年外的星云”
“某种意义上讲,人类对星空怀有好奇,是正常的。”
“渴望见证星河大海的极限,因为我们本就是星辰之子 。”
面对近在咫尺的理之律者核心,布洛妮娅需要完成前一任理之律者留下的考验,考验如下:
给你一个有 n行和 n列的正方形网格。每个单元格包含 0或1。
在操作中,您可以选择网格中的一个单元格并翻转它(从 0→1 或 1→0)。找出最少需要多少次操作才能得到一个在旋转0°、90°、180°和270°时保持不变的正方形。
下图显示了一个网格的所有旋转示例。
输入格式
第一行包含一个整数n,表示网格大小
然后是n行,每行有n个字符(0或1),表示单元格中的数字
输出格式
对每个测试用例输出一个整数—使正方形在旋转 0°、90°、180°和270° 后看起来相同所需的最少操作数。
样例 #1
样例输入 #1
3
010
110
010
样例输出 #1
1
提示
1 < = n < = 1000 1<=n<=1000 1<=n<=1000
#include <bits/stdc++.h>
using namespace std;
const int N=1010;
int a[N][N];
void solve()
{
int n;
cin >> n;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
char c;
cin >> c;
a[i][j] = c-'0';
}
}
int ans = 0;
for(int i = 0; i < (n+1)/2; i++)
{
for(int j = 0; j < n/2; j++)
{
int nowi = i, nowj = j;
int oldnowj = nowj;
int sum = a[nowi][nowj];
nowj = n-nowi-1;
nowi = oldnowj;
sum+=a[nowi][nowj];
oldnowj = nowj;
nowj = n-nowi-1;
nowi = oldnowj;
sum+=a[nowi][nowj];
oldnowj = nowj;
nowj = n-nowi-1;
nowi = oldnowj;
sum+=a[nowi][nowj];
ans+=min(sum, 4-sum);
}
}
cout << ans << endl;
}
int main(){
solve();
return 0;
}
C.罪人挽歌
题目描述
“放弃吧。”
“我是不会让你走的!”
“就凭你这奄奄一息的样子?”
“就凭,我的拳头!”
“我是…不会…放弃的……”
“你一直……都是这样……琪亚娜,你一直都是这样。明明已经遍体鳞伤,却还要勉强自己笑着。你拯救了我拯救了大家你拯救了我拯救了大家,却要独自去承担所有的痛苦,甚至付出生命!”
“芽衣,这是,我的使命……”
“拯救世界什么的大道理我也懂,但是你要让我如何忍受这一切!”
“芽衣,芽衣,不要!”
“我只知道,在我心里,比起这个世界,你更重要!”
那一天,你向我伸出了手,从你抓住我的那一刻起,我的命运就被你改变了。你是我生命中,最重要的人。如果拯救你是一种罪,那就让我来当这个罪人,再见了,琪亚娜。”
面对芽衣的离去,琪亚娜深深的感到自己实力的不足,她决定潜心修炼,于是她制定了自己的修炼计划:
第奇数天:每天修炼8个小时
第偶数天:每天修炼6个小时
已知芽衣化身为雷之律者后战斗力为m,琪亚娜初始战斗力为n,每个小时的修炼可以使琪亚娜增长k点战斗力,请你计算一下琪亚娜要想追上芽衣至少需要多少天的修炼。
输入格式
输入三个整数m,n,k
输出格式
一个整数,琪亚娜追上芽衣所需要的天数
样例 #1
样例输入 #1
28 0 1
样例输出 #1
4
提示
0 < = n < = m < = 1 e 12 , 1 < = k < = 50 0<=n<=m<=1e12,1<=k<=50 0<=n<=m<=1e12,1<=k<=50
//简单数学题
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
int m, n, k;
cin >> m >> n >> k;
int cnt = 0;
cnt += ((m - n) / (6 * k + 8 * k)) * 2;
n += (cnt / 2 ) * (6 * k + 8 * k);
if (n < m) {
if (n + 8 * k >= m) cnt++;
else cnt += 2;
}
cout << cnt << endl;
return 0;
}
D.渡尘
题目描述
日月浮沉,沧海桑田
经历了离别,习惯了绝望
不知时间为何物
亡命于无尽的轮回
只为——使命
千年孤独守护,此刻不再孤单一人
因为在这里,一切都有了改变
欢迎回家,班长
众所周知,符华是一个活了5万年的老怪物,她十分讨厌数字x。在第n年,如果n与x(x不为1)相关(数位上包含x或n为x的倍数),那么符华会在该年陷入沉睡,所以不计入符华的总年龄,现在请你算算符华如今多少岁。
输入格式
一个整数x,表示符华讨厌的数字
输出格式
一个整数,表示符华当前年龄
样例 #1
样例输入 #1
2
样例输出 #1
14580
提示
1 < = n < = 50000 , 2 < = x < = 9 1<=n<=50000,2<=x<=9 1<=n<=50000,2<=x<=9
#include<bits/stdc++.h>
using namespace std;
int x;
bool check(int n) {
int flag1 = 0, flag2 = 0;
if (n % x == 0) flag1 = 1;
while (n > 0) {
if (n % 10 == x) {
flag2 = 1;
break;
}
n /= 10;
}
if (flag1 || flag2) return true;
else return false;
}
int main() {
cin >> x;
int cnt = 0;
for (int i = 1; i <= 50000; i++) {
if (check(i)) continue;
else cnt++;
}
cout << cnt;
return 0;
}
E.薪炎永燃
题目描述
“世界当然不够美好,但也有人让我不要放弃。
她们指引着我,向我证明世界没那么糟糕。
我爱她们,也爱她们所爱的一切。
这把剑连接着我们,它会烧尽漆黑的天空,让光照向更远的地方。
这就是我和大家的,回家的路!”
此刻,琪亚娜在伙伴的帮助下变得无比强大,现在由她来对付强大的千人律者,而你负责清理旁边的小怪,现在给你一份n*n的地图,上面记录着每个位置上怪物的数量,你能够发射一枚炮弹,该炮弹能够清理以落点为中心周围3 * 3的区域,请你找出能够消灭最多的人的攻击方式,输出最多消灭的人的数量
输入格式
首先一个整数n
接下来n行,每行输入n个整数,代表该点上怪物的数量
输出格式
一个整数,代表最多消灭的人的数量
样例 #1
样例输入 #1
5
1 1 1 1 1
1 1 1 1 1
1 1 1 2 1
1 1 1 1 1
1 1 1 1 1
样例输出 #1
10
提示
3 < = n < = 1000 , 0 < = a [ i ] [ j ] < = 1 e 5 3<=n<=1000,0<=a[i][j]<=1e5 3<=n<=1000,0<=a[i][j]<=1e5
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e3+10;
int a[N][N];
int dx[8]={-1,-1,-1,0,0,1,1,1};
int dy[8]={-1,0,1,-1,1,-1,0,1};
signed main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
int ans = 0;
for(int i=2;i<=n-1;i++){
for(int j=2;j<=n-1;j++){
int sum = 0;
for(int k=0;k<8;k++){
int x=i+dx[k],y=j+dy[k];
sum+=a[x][y];
}
ans=max(ans,sum+a[i][j]);
}
}
cout<<ans<<endl;
return 0;
}
F.阿波卡利斯如是说
题目描述
当一个人,真正想改变世界的时候,才会发现个人的力量是多么渺小。圣女为民众付出了一切,可换来的却是无情的镣铐和绞索。 世界如此混沌,它既不公平,也不合理。它迫害英雄,滋养恶类,丑陋遍地,美好无存。
呵,世界的恶意,就由恶人来斩断吧。
这是她和明天之间的距离,这是世界对她的无情反扑,但她的信徒,绝不会因此放弃。
人一旦魂飞魄散,就无法再起死回生。
世界允许意识匹配新的容器,却不允许容器收集消散的意识。
想要拯救唯一的她,我只能,在过去创造出新的可能。
这另一个未来,将是,属于她的时刻。
…
卡莲,活下去。
…
这是一个人能做的最自私的事。
天命主教奥托·阿波卡利斯,经过500年的谋划,现在只需最后一步就能拯救所爱之人卡莲,那就是击败身前由世界树所化为的怪兽,怪兽的血量为m,主教手里有一个神之键,名为"虚空万藏",可以幻化为n种武器中的一种,每种武器的攻击方式为轻击、重击和大招,每种攻击方式只能释放一次,但由于主教已身受重伤,只能释放最多两次攻击,请你帮助主教判断每种武器是否能够击败怪兽,如果能输出"Yes",不能则输出"No",并统计可以击败怪兽的武器数量。
我愚弄了友人,愚弄了至亲,愚弄了这个世界和它之上的规则,只为了给予唯一真实的你,以第二次生命。 ——奥托·阿波卡利斯
输入格式
第一行包含两个整数n和m,代表可幻化的武器数量和怪兽的血量
接下来n行,每行包含三个数字a,b,c,分别代表该种武器轻击、重击、大招的伤害
输出格式
共n+1行,前n行对于每种武器,如果能够击败怪兽输出"Yes",否则输出"No",最后一行输出能够击败怪兽的武器数量
样例 #1
样例输入 #1
5 10
8 1 2
4 4 5
9 9 9
0 0 0
8 5 3
样例输出 #1
Yes
No
Yes
No
Yes
3
提示
0 < = a , b , c < = m < = 1 e 9 , 1 < = n < = 1000 0<=a,b,c<=m<=1e9,1<=n<=1000 0<=a,b,c<=m<=1e9,1<=n<=1000
//类似三角形判断
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
int n,m;
cin>>n>>m;
int cnt = 0;
int a,b,c;
while(n--){
cin>>a>>b>>c;
if(a+b>=m || a+c>=m || b+c>=m){
cout<<"Yes"<<endl;
cnt++;
}
else cout<<"No"<<endl;
}
cout<<cnt<<endl;
return 0;
}
G.因你而在的故事
题目描述
「某一日,祂从天坠落。人们抬头仰望,于是看见了星空。」
「星月送来神的女儿,她愿成为人的伴侣。」
「长风化作她的貂车,四海落成她的园圃。鸟雀衔来善的种子,百花编织爱的颂歌。」
「她便是这样降生于世,行于大地,与人类一同长大,与世界一起发芽。」
「而今,终焉之时将至。」
「而今,归去之时已至。」
「就此告别吧,美丽的世界。」
「此后,将有群星闪耀,因为我如今来过。」
「此后,将有百花绽放,因为我从未离去。」
「请将我的箭、我的花、与我的爱,织成新生的种子,带向那枯萎的大地。」
「然后,便让它开出永恒而无瑕的人性之华吧。」
这是一道签到题,输出520行"回应我吧,爱莉希雅!"
输入格式
无
输出格式
520行"回应我吧,爱莉希雅!",不包含引号
样例 #1
样例输入 #1
无
样例输出 #1
无
#include<bits/stdc++.h>
using namespace std;
int main() {
for (int i = 1; i <= 520; i++) {
cout << "回应我吧,爱莉希雅!" << endl;
}
return 0;
}
H.毕业旅行
题目描述
命运曾向世界提问
于是,英雄给出了答案
跨越漫长的轮回
创造出属于每一个人的故事
这是一个关于爱的故事,它也将有一个爱的结局,所以就像以前那样,一步一步继续向前吧。你看,我们留下的足迹,无论何时,它就在这里。
琪亚娜手中有一个长度为9的字符串s,它只包含字母(区分大小写),琪亚娜想知道字符串s与字符串"Lovestory"的差异是多少。
例如:""acmiscool"与"Lovestory"的差异为7
“loVeStory"与"Lovestory"的差异为3(粗体表示)
请你帮琪亚娜找出字符串s与"Lovestory"差异为多少,若差异为0,输出"This is a story about love!”,不包含引号。
输入格式
第一行包含一个整数 ,表示测试用例数。
接下来t行,每行输入一个字符串s(字符串的开头和末尾不包含空格),s由字母组成
输出格式
对于每个测试用例,若差异不为0,则输出一个整数表示差异的数量,若为0,则输出"This is a story about love!",不包含引号
样例 #1
样例输入 #1
5
loveStory
Lovestory
LovesTory
acmiscool
Lovestory
样例输出 #1
2
This is a story about love!
1
7
This is a story about love!
提示
1 < = t < = 1000 1<=t<=1000 1<=t<=1000
#include<bits/stdc++.h>
using namespace std;
int main(){
string temp = "Lovestory";
int n;
cin>>n;
while(n--){
string s;
cin>>s;
int cnt = 0;
for(int i=0;i<s.size();i++){
if(s[i]!=temp[i]) cnt++;
}
if(cnt == 0 ) cout<<"This is a story about love!"<<endl;
else cout<<cnt<<endl;
}
return 0;
}
重现赛网址:https://www.luogu.com.cn/contest/128674