25.1.21学习内容
A - 我是循环大王
问题陈述
有 N 条蛇。
最初,第 i 条蛇的厚度为 Ti,长度为 Li。
蛇的重量定义为其厚度和长度的乘积。
对于每个满足 1≤k≤D 的整数 k,找出当每条蛇的长度增加 k 时,最重蛇的重量。
约束条件
-
1≤N,D≤100
-
1≤Ti,Li≤100
-
所有输入值均为整数。
输入
输入通过标准输入以以下格式给出:
N D
T1 L1
T2 L2
⋮
TN LN
输出
打印 D 行。第 k 行应包含当每条蛇的长度增加k 时最重蛇的重量。
示例 1
Inputcopy | Outputcopy |
---|---|
4 3 3 3 5 1 2 4 1 10 | 12 15 20 |
当每条蛇的长度增加 1 时,蛇的重量变为 12,10,10,11,因此在第一行打印 12。
当每条蛇的长度增加 2 时,蛇的重量变为 15,15,12,12,因此在第二行打印 15。
当每条蛇的长度增加 3 时,蛇的重量变为 18,20,14,13,因此在第三行打印 20。
示例 2
Inputcopy | Outputcopy |
---|---|
1 4 100 100 | 10100 10200 10300 10400d |
代码:
#include<stdio.h>
int max(int a[][2],int n)
{
int max_temp=0;
for(int i=0;i<n;i++)
{
a[i][1]++;
int temp=a[i][0]*a[i][1];
if(temp>max_temp)max_temp=temp;
}
return max_temp;
}
int main()
{
int a,b,c[105][2];
scanf("%d %d",&a,&b);
for(int i=0;i<a;i++)
{
scanf("%d %d",&c[i][0],&c[i][1]);
}
for(int i=0;i<b;i++)
{
printf("%d\n",max(c,a));
}
return 0;
}
B - 林表明霁色
问题陈述
在某个星球上,有 N 外星人,他们都是未成年人。
第 i个外星人目前有 Ai 块石头,并将在 i 年后变成成年人。
当某人在这个星球上成为成年人时,每个拥有至少一块石头的成年人都会给刚刚成为成年人的外星人赠送一块石头作为祝贺礼物。
找出每个外星人在 N 年后将拥有多少块石头。
假设未来不会再出生新的外星人。
约束条件
-
1≤N≤5×10^5
-
0≤Ai≤5×10^5
-
所有输入值均为整数。
输入
输入通过标准输入以以下格式给出:
N
A1、A2 …… AN
输出
设 Bi 为第 i 个外星人在 N 年后拥有的石头数量。按顺序打印 B1,B2,…,BN,用空格分隔。
示例 1
Input 输入 | Output 输出 |
---|---|
4
5 0 9 3
| 2 0 10 5
|
设 Ci为某一时刻第 i 个外星人拥有的石头数量。
最初,(C1,C2,C3,C4)=(5,0,9,3)。
经过 1 年后,(C1,C2,C3,C4)=(5,0,9,3)。
经过 2 年后,(C1,C2,C3,C4)=(4,1,9,3)。
经过 3 年后,(C1,C2,C3,C4)=(3,0,11,3)。
经过 4 年后,(C1,C2,C3,C4)=(2,0,10,5)。
示例 2
Input 输入 | Output 输出 |
---|---|
5
4 6 7 2 5
| 0 4 7 4 9
|
示例 3
Input 输入 | Output 输出 |
---|---|
10
2 9 1 2 0 4 6 7 1 5
| 0 2 0 0 0 4 7 10 4 10 |
代码:
注意:该代码的注释为AI添加,作者仅提供代码。
#include<stdio.h>
#include<string.h>
int main()
{
int a, temp = 0; // a: 外星人数量, temp: 当前外星人将获得的石头数量
scanf("%d", &a); // 读取外星人数量
int b[a], mark[a + 1], c[a]; // b: 每个外星人初始的石头数量, mark: 差分数组, c: 记录祝贺的外星人位置
memset(mark, 0, sizeof(mark)); // 初始化mark数组为0
for(int i = 0; i < a; i++)
{
scanf("%d", &b[i]); // 读取每个外星人的初始石头数量
if(b[i] - (a - 1 - i) >= 0) { // 判断当前外星人是否能祝贺后面的外星人
b[i] -= (a - 1 - i); // 更新当前外星人的石头数量
mark[i + 1]++; // 标记当前外星人可以祝贺
mark[a]--; // 结束标记
c[i] = a; // 记录可以祝贺到的外星人位置
}
else {
mark[i + 1]++; // 标记当前外星人可以祝贺
mark[a - ((a - 1 - i) - b[i])]--; // 更新祝贺的结束位置
c[i] = a - ((a - 1 - i) - b[i]); // 记录可以祝贺到的外星人位置
b[i] = 0; // 当前外星人没有石头
}
}
for(int i = 0; i < a; i++)
{
temp += mark[i]; // 更新当前外星人将获得的石头数量
if(c[i] == a)
b[i] += temp; // 如果已经给之后的每个外星人送出石头,则直接累加
else {
if(a - c[i] >= temp) { // 判断是否能给之后的每个外星人送出石头
mark[c[i]]++; // 更新祝贺的开始位置
mark[c[i] + temp]--; // 更新祝贺的结束位置
}
else { // 如果能给之后的每个外星人送出石头
mark[c[i]]++; // 更新祝贺的开始位置
b[i] = temp - (a - c[i]); // 剩下的石头
}
}
printf("%d ", b[i]); // 输出每个外星人最终的石头数量
}
return 0; // 程序结束
}
E - 签到题OR送命题
在充满鳄鱼的佛罗里达大沼泽地漫游时,佛罗里达人遇到了一个非常奇特的对决。 |
有 n 片睡莲垫排成一排,从左到右编号为 1 到 n。爱丽丝和鲍勃是分别位于不同睡莲垫上的青蛙,位置分别为 a 和 b。他们轮流跳跃,爱丽丝先开始。
在青蛙的回合中,它可以向左或向右跳跃一个位置,只要目标睡莲垫存在。例如,在爱丽丝的第一次回合中,只要这些睡莲垫在范围内,她可以跳到睡莲垫 a−1 或 a+1。重要的是,每只青蛙 必须跳跃,而不能停留在同一个睡莲垫上。
然而,有一些限制:
-
两只青蛙不能占据同一个睡莲垫。这意味着爱丽丝不能跳到鲍勃当前占据的睡莲垫,反之亦然。
-
如果一只青蛙在其回合中无法进行有效的跳跃,它就会输掉游戏。因此,另一只青蛙获胜。
假设双方玩家都进行最佳游戏,确定爱丽丝是否能够保证获胜。可以证明,如果双方玩家都进行最佳游戏,游戏将在有限的回合后结束。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 t (1≤t≤500)。测试用例的描述如下。
每个测试用例的第一行也是唯一一行包含三个整数 n、a 和 b (2≤n≤100、1≤a,b≤n、a≠b) — 睡莲垫的数量,以及爱丽丝和鲍勃的起始位置。
注意,所有测试用例的 总和没有 限制。
输出
对于每个测试用例,打印一行,包含 "YES" 或 "NO",表示爱丽丝是否有获胜策略。
您可以以任何大小写输出答案(大写或小写)。例如,字符串 "yEs"、"yes"、"Yes" 和 "YES" 都会被识别为积极响应。
示例
Input 输入 | Output 输出 |
---|---|
5
2 1 2
3 3 1
4 2 3
5 2 4
7 6 2
| NO
YES
NO
YES
YES
|
注意
在第一个测试用例中,爱丽丝没有合法的移动。因此,爱丽丝在第一次回合中输掉了。
在第二个测试用例中,爱丽丝只能移动到睡莲垫 2。然后,鲍勃没有合法的移动。因此,在这种情况下,爱丽丝有一个获胜策略。
在第三个测试用例中,爱丽丝只能移动到睡莲垫 1。然后,鲍勃可以移动到睡莲垫 2。爱丽丝无法再移动并输掉了,鲍勃获胜。可以证明,无论爱丽丝如何移动,鲍勃总是能赢;因此,爱丽丝没有获胜策略。
代码:
#include<stdio.h>
#include<math.h>
int main()
{
int a;
scanf("%d",&a);
for(int i=0;i<a;i++)
{
int num,m,n;
scanf("%d %d %d",&num,&m,&n);
if((m==1&&n==2)||(m==num-1&&n==num)||m-n==1||n-m==1)printf("NO\n");
else {
if((int)fabs((double)n-m-1)%2==0)printf("NO\n");
else printf("YES\n");
}
}
return 0;
}
声明:所用题皆来自刷题网,作者仅用来向组织反馈学习情况,无任何盈利行为。
原文地址:https://blog.csdn.net/The_cute_cat/article/details/145283923
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!