河工院计算机学院23级新生周赛(一)

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(x5)x+f(x20)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<=1e121<=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<=500002<=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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微雨落湖心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>